我们有一个从 C# 控制台应用程序运行的“工作者”服务,对于开发,我们总是运行该服务的单个实例,它获取数据块并执行一些计算,这些数据块由另一个服务提供(跟踪剩下多少数据等)
现在在 QA 中,我们希望同时(在同一台机器上)运行“worker”服务的多个实例。但是,一旦启动第二个实例,我们就会遇到异常:
TransportManager 未能使用 NetTcpPortSharing 服务侦听提供的 URI:该 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,以便至少端口保持不变?
或者如果有不同的方式来运行同一服务的多个实例?