【发布时间】:2012-09-06 21:16:14
【问题描述】:
我们有一个从 C# 控制台应用程序运行的“worker”服务,对于开发,我们总是运行该服务的单个实例,它获取数据块并执行一些计算,这些数据块由另一个服务提供(它会跟踪剩余的数据量等)
现在在 QA 中,我们希望同时(在同一台机器上)运行多个“worker”服务实例。但是,一旦启动第二个实例,我们就会遇到异常:
TransportManager 未能使用 NetTcpPortSharing 服务:URI 已注册到 服务。
我们正在使用 netTcpBinding 并且端点地址被硬编码到 app.config 中并且保持不变,因此我假设我们遇到了这个错误。
<services>
<service behaviorConfiguration="CoreBehavior" name="WorkerService">
<endpoint address="net.tcp://localhost:8001/WorkerAssignment" binding="netTcpBinding" contract="IWorkerService" bindingConfiguration="CoreTcpBinding"/>
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="CoreTcpBinding" portSharingEnabled="true">
<security mode="None"/>
</binding>
</netTcpBinding>
</bindings>
应用代码:
var host = new ServiceHost(typeof(WorkerService));
host.Open();
我们如何为每个实例提供不同的 URI,以便至少端口保持不变?
或者如果有不同的方式来运行同一服务的多个实例?
【问题讨论】:
-
为什么要运行同一个服务的多个实例,是性能需求吗?
-
是的,主服务“分配”工作(内部划分工作并跟踪下一批),工作服务实际执行工作。所以多个工人服务会减少我们的工作时间。
-
为了您分配和划分工作的需要您可以使用中间路由服务查看 WCF 中的负载平衡 - robbincremers.me/2012/01/05/…
-
好吧,分配部分不是这里的问题,即使我使用路由机制,我仍然需要打开多个(工作服务)实例来路由,这意味着打开多个端口。
标签: c# .net wcf multiple-instances self-hosting