我无法通过调用它的构造函数来测试可靠的服务/ 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支持?演员怎么样?
我需要HttpClient.Timeout
在提出请求后更改属性.当我尝试时,我得到一个例外:
此实例已启动一个或多个请求.只能在发送第一个请求之前修改属性.
有什么方法可以避免这种情况吗?
最近我从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.Increment
VB版本中?我认为C#和VB中的foreach完全相同.或者它只是一个转换器"保险"?
我尝试使用系统资源的最佳使用来创建设计良好的TPL数据流管道.我的项目是一个HTML解析器,它将解析后的值添加到SQL Server DB中.我已经拥有了我未来管道的所有方法,现在我的问题是将它们放在Dataflow块中的最佳方法是什么,以及我应该使用多少块?一些方法是CPU绑定的,其中一些方法 - I/O绑定(从Internet加载,SQL Server数据库查询).现在我认为将每个I/O操作放在单独的块中就像这个方案一样正确:
在这种情况下设计管道的基本规则是什么?
TPL数据流块具有.InputCount
和.OutputCount
属性.但是它现在可以执行项目执行,并且没有类似的属性.Busy [Boolean]
.那么有没有办法知道块现在是否正在运行且其中一个项目仍在那里?
更新:
让我解释一下我的问题.pic上是我目前的Dataflow网络方案.
BufferBlock
保存要加载的URL,TransformBlock
通过代理服务器加载页面的数量,ActionBlock
最后执行加载页面的工作.TransformBlock
s已预定义.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都不会将其取回.这就是为什么我想知道TransformBlock
s是否还在运行.抱歉,我的英语不好.
据我所知,接口无法实例化.
如果这是真的,为什么下面的代码编译和执行?它允许您创建可变接口.为什么这可能?
接口:
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)
结果:
更新:
它只在声明数组时发生.不是一个例子.
例如,我有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) 我需要拆分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) 通过<SelfContained>true</SelfContained>
在发布配置文件中进行定义,我可以从本地计算机上将.NET Core应用程序作为自托管应用程序发布到Azure Web Service 。
默认情况下,Azure DevOps管道中的App Service Deploy任务会将其发布到IIS。如何配置它以自托管方式发布?
azure-deployment azure-devops azure-pipelines azure-pipelines-release-pipeline
c# ×8
.net ×4
azure ×2
interface ×2
pipeline ×2
tpl-dataflow ×2
unit-testing ×2
autofixture ×1
azure-devops ×1
azure-pipelines-release-pipeline ×1
block ×1
foreach ×1
increment ×1
instance ×1
list ×1
split ×1
stub ×1
timeout ×1
variables ×1
web-services ×1