小编AsV*_*leO的帖子

服务结构单元测试和依赖注入

我无法通过调用它的构造函数来测试可靠的服务/ Actor,然后测试它的方法.var testService = new SomeService();抛出NullReferenceException.那么我可以用部署的服务做什么..

据我所知,部署的SF Reliable Services/Actors不是标准的.NET类,部署S/A的单元测试可能是一个奇怪的想法.

无论如何,现在我试着尝试一下.

例如.我刚刚部署了一个服务,而不是在测试中我创建了一个Proxy对象并将项添加到Service的输入队列中.然后我需要声明输入队列计数= 1.如果我刚刚部署了一个服务而没有其他客户端/服务/演员使用它的输入队列,它就可以工作.但是下次这次测试失败就是问题所在.我需要让服务停止与其他消费者一起操作,丢弃它的队列而不是测试它.为此,我可以创建一些TestMode属性和一些方法,如PropareoForTests/TestingCompleted,并在测试之前和之后从测试客户端调用它们.

像这样做这是一个坏主意.也许有一些单元测试SF的指导原则?谢谢.

更新:

在研究Service Fabric Web Reference Application示例时,我发现了这个TODO字符串:

/// TODO: Temporary property-injection for an IServiceProxyWrapper until constructor injection is available.
Run Code Online (Sandbox Code Playgroud)

这是否意味着SF服务将改善其DI支持?演员怎么样?

c# unit-testing web-services azure azure-service-fabric

17
推荐指数
1
解决办法
9208
查看次数

在.NET中动态更改HttpClient.Timeout

我需要HttpClient.Timeout在提出请求后更改属性.当我尝试时,我得到一个例外:

此实例已启动一个或多个请求.只能在发送第一个请求之前修改属性.

有什么方法可以避免这种情况吗?

.net c# timeout dotnet-httpclient

16
推荐指数
3
解决办法
1万
查看次数

服务面料可靠服务管道设计

如果Service Fabric的可靠服务我需要实现管道,并且从可靠性简单和简单的良好设计的角度来看,我需要一些关于这些方法更适合的指导:

在此输入图像描述

c# pipeline azure microservices azure-service-fabric

14
推荐指数
1
解决办法
2695
查看次数

在#ach循环中,C#++运算符是否成为线程安全的?

最近我从VB转到C#,所以我经常使用C#到VB.NET转换器来理解语法差异.在将下一个方法移动到VB时,我发现了一个有趣的事情

C#原始代码:

 public bool ExceedsThreshold(int threshold, IEnumerable<bool> bools)
{
   int trueCnt = 0;
   foreach(bool b in bools)
      if (b && (++trueCnt > threshold)) 
          return true;
   return false;          
} 
Run Code Online (Sandbox Code Playgroud)

VB.NET结果:

Public Function ExceedsThreshold(threshold As Integer, bools As IEnumerable(Of Boolean)) As Boolean
Dim trueCnt As Integer = 0
For Each b As Boolean In bools
    If b AndAlso (System.Threading.Interlocked.Increment(trueCnt) > threshold) Then
        Return True
    End If
Next
Return False End Function
Run Code Online (Sandbox Code Playgroud)

C#的++运算符被替换为System.Threading.Interlocked.Increment 是否意味着++如果在foreach循环中使用,线程安全运算符不会成为线程安全的?它是一种语法糖吗?如果这是真的,那么为什么转换器放在Interlocked.IncrementVB版本中?我认为C#和VB中的foreach完全相同.或者它只是一个转换器"保险"?

c# foreach increment thread-safety interlocked-increment

11
推荐指数
1
解决办法
534
查看次数

TPL Dataflow管道设计基础知识

我尝试使用系统资源的最佳使用来创建设计良好的TPL数据流管道.我的项目是一个HTML解析器,它将解析后的值添加到SQL Server DB中.我已经拥有了我未来管道的所有方法,现在我的问题是将它们放在Dataflow块中的最佳方法是什么,以及我应该使用多少块?一些方法是CPU绑定的,其中一些方法 - I/O绑定(从Internet加载,SQL Server数据库查询).现在我认为将每个I/O操作放在单独的块中就像这个方案一样正确: TPL数据流管道

在这种情况下设计管道的基本规则是什么?

.net pipeline task-parallel-library tpl-dataflow

10
推荐指数
1
解决办法
944
查看次数

如何知道TPL Dataflow Block是否忙?

TPL数据流块具有.InputCount.OutputCount属性.但是它现在可以执行项目执行,并且没有类似的属性.Busy [Boolean].那么有没有办法知道块现在是否正在运行且其中一个项目仍在那里?

在此输入图像描述

更新:

让我解释一下我的问题.pic上是我目前的Dataflow网络方案. BufferBlock保存要加载的URL,TransformBlock通过代理服务器加载页面的数量,ActionBlock最后执行加载页面的工作.TransformBlocks已预定义.BoundedCapacity,因此BufferBlock等待任何TransformBlocks变为空闲然后将项目发布到其中.

最初我发布所有网址Buffer Block.此外,如果TransformBlock在加载HTML期间抛出异常之一,则返回它的URL BufferBlock.所以我的目标是等到我的所有URL都被保证加载和解析.现在我等着这样:

Do While _BufferBlock.Count > 0 Or _ 
         GetLoadBlocksTotalInputOutputCount(_TransformBlocks) > 0 Or _ 
         _ActionBlock.InputCount > 0

        Await Task.Delay(1000)
Loop
Run Code Online (Sandbox Code Playgroud)

然后我打电话给TransformBlock.Complete他们所有人.但在这种情况下,仍然可以有最后的URL加载它TransformBlock.如果最后一个URL未成功加载,它将变为"丢失",因为TransformBlocks都不会将其取回.这就是为什么我想知道TransformBlocks是否还在运行.抱歉,我的英语不好.

在此输入图像描述

.net c# block task-parallel-library tpl-dataflow

7
推荐指数
1
解决办法
1572
查看次数

为什么接口变量实例化可能?

据我所知,接口无法实例化.

如果这是真的,为什么下面的代码编译和执行?它允许您创建可变接口.为什么这可能?

接口:

public interface IDynamicCode<out TCodeOut>
{        
    object DynamicClassInstance { get; set; }
    TCodeOut Execute(string value = "");
}
Run Code Online (Sandbox Code Playgroud)

InCode:

var x = new IDynamicCode<string>[10];
Run Code Online (Sandbox Code Playgroud)

结果:

结果

更新:

它只在声明数组时发生.不是一个例子.

.net c# variables interface instance

7
推荐指数
4
解决办法
1194
查看次数

使用AutoFixture创建EF实体存根

例如,我有EF Database First生成的这些部分类:

狗:( EF实体)

public partial class Dog
{
    public int DogID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public int PetOwnerID { get; set; }
    // Navigation property
    public virtual PetOwner PetOwner { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

PetOwner :( EF实体)

public partial class PetOwner
{
    public int PetOwnerID { get; set; }
    public string PetOwnerName { get; set; }
    // Navigation property
    public virtual ICollection<Dog> Dogs { …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing entity-framework stub autofixture

6
推荐指数
1
解决办法
1061
查看次数

C#split按实现划分的接口列表

我需要拆分List<IInterface>以获取具体实现的列表IInterface.我怎样才能以最佳方式做到这一点?

        public interface IPet { }
        public class Dog :IPet { }
        public class Cat : IPet { }
        public class Parrot : IPet { }

        public void Act()
        {
            var lst = new List<IPet>() {new Dog(),new Cat(),new Parrot()};
            // I need to get three lists that hold each implementation 
            // of IPet: List<Dog>, List<Cat>, List<Parrot>
        }
Run Code Online (Sandbox Code Playgroud)

c# implementation split interface list

6
推荐指数
1
解决办法
190
查看次数

使用Azure DevOps App Service Deploy任务部署独立的.NET Core应用程序

通过<SelfContained>true</SelfContained>在发布配置文件中进行定义,我可以从本地计算机上将.NET Core应用程序作为自托管应用程序发布到Azure Web Service 。

默认情况下,Azure DevOps管道中的App Service Deploy任务会将其发布到IIS。如何配置它以自托管方式发布?

azure-deployment azure-devops azure-pipelines azure-pipelines-release-pipeline

6
推荐指数
1
解决办法
602
查看次数