gpt4 book ai didi

c# - 自托管 WCF 服务的多个实例

转载 作者:行者123 更新时间:2023-11-30 15:02:51 26 4
gpt4 key购买 nike

我们有一个从控制台应用程序在 c# 中运行的“ worker ”服务,为了开发我们总是运行该服务的单个实例,它获取数据 block 并执行一些计算,这些数据 block 由另一个服务提供(它跟踪剩余的数据量等)

现在在 QA 中,我们希望同时运行“worker”服务的多个实例(在同一台机器上)。但是,一旦启动第二个实例,我们就会遇到异常:

The TransportManager failed to listen on the supplied URI using the NetTcpPortSharing service: the URI is already registered with the service.

我们正在使用 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,以便至少端口保持不变?

或者是否有不同的方式来运行同一服务的多个实例?

最佳答案

如果您想拥有多个服务实例而不是拥有单个服务主机就足够了 - 只需使用 ServiceBehaviorAttribute 装饰您的 WorkerService

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Percall)] 
public class WorkerService : IWorkerService
{
//...service data
}

这将确保对服务的每次调用都将首先创建服务的新实例。可以找到创建服务类的其他方法 here

但是,如果您希望拥有多个服务主机,那么不可能有两个服务主机在完全相同的 url 上托管相同的服务。

另一种情况是,如果您想让一个服务主机在具有相同基地址和自定义 uri 的多个端点上托管相同的服务。在这种情况下,您可以使用重载的 ServiceHost 构造函数或研究方法 AddBaseAddressAddServiceEndpoint。或者,如果您想从配置文件中执行此操作,那么这里是对您的代码稍作修改的简单示例

<service behaviorConfiguration="CoreBehavior" name="WorkerService">
<endpoint address="WorkerAssignment" binding="netTcpBinding" contract="IWorkerService"/>
<endpoint address="QAWorkerAssignment" binding="netTcpBinding" contract="IWorkerService"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8001/" />
</baseAddresses>
</host>
</service>

使用此配置,您的服务将有两个端点

net.tcp://localhost:8001/WorkerAssignment

net.tcp://localhost:8001/QAWorkerAssignment

关于c# - 自托管 WCF 服务的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com