Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StatefulService contra ICommunicationListener的职责是什么_C#_Azure Service Fabric_Service Fabric Stateful - Fatal编程技术网

C# StatefulService contra ICommunicationListener的职责是什么

C# StatefulService contra ICommunicationListener的职责是什么,c#,azure-service-fabric,service-fabric-stateful,C#,Azure Service Fabric,Service Fabric Stateful,我将使用第三方消息传递系统来接收有状态服务的消息。因此,我开始研究ICommunicationListener接口和现有示例。然而,由于大多数示例直接或间接地在通信侦听器中处理入站消息,因此不清楚它应该做什么。我找不到任何方法将入站消息传递给服务 因此,我找不到任何有意义的理由来解释为什么存在ICommunicationListener接口或CreateServiceReplicaListeners方法。服务本身已经掌握了有关如何创建和配置侦听器的所有知识。因此,您可以直接在有状态服务中配置自己

我将使用第三方消息传递系统来接收有状态服务的消息。因此,我开始研究
ICommunicationListener
接口和现有示例。然而,由于大多数示例直接或间接地在通信侦听器中处理入站消息,因此不清楚它应该做什么。我找不到任何方法将入站消息传递给服务

因此,我找不到任何有意义的理由来解释为什么存在
ICommunicationListener
接口或
CreateServiceReplicaListeners
方法。服务本身已经掌握了有关如何创建和配置侦听器的所有知识。因此,您可以直接在有状态服务中配置自己的侦听器(使用组合),而无需强制实现特定接口


那么,额外的复杂性增加了什么呢?

下面是一个实现
ICommunicationListener
的示例。我传入一个处理传入消息的IServiceBusMessageReceiver

我也为此挣扎。在我看来,ICommunicationListener的名字是误导性的,因为在大多数情况下,它并不是真正的“东西”来进行倾听/交流。但是,它抽象了功能并定义了启动、关闭和中止实际通信通道的方法。这允许服务结构服务独立于实际通信通道启动和关闭。它还允许通信通道在服务突然关闭时正常关闭


也许不是答案,但很想发表评论。

。。你的例子很好地说明了我的观点。无需使用
ICommunicationListener
接口。因此,你并不是在真正回答我的问题。这是关于分离关注点,你将通信通道与处理传入请求的方法断开。因此,如果消息来自其他/附加源,则服务不需要更改。你也可以有多个频道。它确实需要改变。它需要包含新的侦听器。我在问题中特别说明了成分。随着组合的出现,新通信方法的变化仍然很小。关于侦听器的启动/停止。除非服务启动/停止,否则它们会被调用吗?是的,当您需要它停止时(如在自定义的主动/被动设置中),或者当服务副本从非侦听辅助提升到侦听主或v.v.。但是这些更改也应用于服务本身,对吗?