当前位置: 首页 > 编程语言 > C#

自托管WCF服务的多个实例分享

时间:2023-04-10 11:42:05 C#

C#学习教程:自托管WCF服务共享的多个实例获取数据块并执行一些计算的“worker”服务,由另一个服务提供服务(跟踪剩余的数据量等)现在在QA中,我们希望同时运行“worker”服务的多个实例(在同一台机器)。但是,一旦第二个实例启动,我们就会遇到异常:TransportManager无法使用NetTcpPortSharing服务侦听提供的URI:URI已在服务中注册。我们正在使用netTcpBinding并且端点地址被硬编码到app.config中并保持不变,所以我假设我们遇到了这个错误。应用代码:varhost=newServiceHost(typeof(WorkerService));主机.Open();我们如何为每个实例提供不同的URI,以便至少端口保持不变?或者是否有不同的方式来运行同一服务的多个实例?如果您想拥有多个服务实例而不是单个服务主机-只需使用ServiceBehaviorAttribute[ServiceBehavior(InstanceContextMode=InstanceContextMode.Percall)]装饰您的WorkerServicepublicclassWorkerService:IWorkerService{//...servicedata}这将确保每次调用该服务都将首先创建一个新的服务实例。可以在此处找到创建服务类的其他方法但是,如果您希望拥有多个服务主机,则不能让两个服务主机在完全相同的URL上托管相同的服务。另一种情况是,如果您想让一个服务主机在具有相同基地址和自定义uri的多个端点上托管相同的服务。在这种情况下,您可以使用重载的ServiceHost构造函数或研究方法AddBaseAddress、AddServiceEndpoint。或者,如果您想从配置文件执行此操作,那么这个简单的示例会使用此配置稍微修改您的代码,您将拥有net.tcp://localhost:8001/WorkerAssignment'snetforbothserviceendpoints.tcp://localhost:8001/QAWorkerAssignmentMurtaza你是对的,你仍然需要多个实例,问题是如何给不同的端口交替1:对于每个服务实例:在调用ServiceHost.Open之前,你可以将端点添加到服务ServiceHostserviceHost=newServiceHost(typeof(CalculatorService))WSHttpBindingbinding=newWSHttpBinding();serviceHost.AddServiceEndpoint(typeof(ICalculator),绑定,“http://localhost:8000/servicemodelsamples/service/basic”);在上面的代码中,地址部分可以为每个服务实例使用不同的端口。更多信息在链接上备选方案2:启用端口共享您可以定义您的特定行为这就是C#学习教程的全部内容:自托管WCF服务共享的多个实例,如果它对每个人都有用并且需要进一步了解C#学习教程,希望大家多多关注——【ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall,ConcurrencyMode=ConcurrencyMode.Multiple)】本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: