以编程方式创建WCF的Windows服务:如何使用Per-Call InstanceContextMode公开它?

时间:2011-09-19 16:27:02

标签: c# .net wcf windows-services

我的应用程序由很多不同的Windows服务组成。它们中的每一个都以编程方式创建WCF服务。我尝试使用“per-call”instancecontextmode配置我的服务,但它似乎一次处理一个请求。

我该怎么办? 实现服务接口的类使用以下属性进行修饰:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

虽然服务实例化如下:

ServiceHost _host = new ServiceHost(typeof(IMultiMarketBatchNotification));
_host.AddServiceEndpoint(typeof(IMultiMarketBatchNotification), binding, myAddress);

其中:

  • IMultiMarketBatchNotification是服务接口
  • binding是绑定的实例(NetTcpBinding)
  • myAddress是一个包含服务网址的字符串(如net.tcp:// ...)

还不够吗?

谢谢, 马可

1 个答案:

答案 0 :(得分:4)

您需要在设置ServiceHost之后添加这些代码行,但在打开它之前:

// look for the "ServiceBehavior" 
ServiceBehaviorAttribute srvBehavior = host.Description.Behaviors.Find<ServiceBehaviorAttribute>();

if (srvBehavior == null)
{
   // if we didn't find the service behavior - create one and add it to the list of behaviors
   srvBehavior = new ServiceBehaviorAttribute();
   srvBehavior.InstanceContextMode == InstanceContextMode.PerCall;
   host.Description.Behaviors.Add(srvBehavior);
}
else
{
   // if we found it - make sure the InstanceContextMode is set up properly
   srvBehavior.InstanceContextMode == InstanceContextMode.PerCall;
}

应该这样做。