Служба Windows с WCF, созданная программным способом: как предоставить ее с помощью Per-Call InstanceContextMode? - PullRequest
0 голосов
/ 19 сентября 2011

мое приложение состоит из множества различных служб Windows.Каждый из них создает программно сервис WCF.Я попытался настроить свой сервис с помощью экземпляра contextmode для каждого вызова, но, похоже, он обрабатывает один запрос за раз.

Что мне делать?Класс, реализующий интерфейс службы, имеет следующий атрибут:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

В то время как служба создается следующим образом:

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

где:

  • IMultiMarketBatchNotificationэто интерфейс службы
  • привязка является экземпляром привязки (NetTcpBinding)
  • myAddress - строка, содержащая URL службы (например, net.tcp: // ...)

Разве этого не достаточно?

Спасибо, Марко

1 Ответ

4 голосов
/ 19 сентября 2011

Вам необходимо добавить эти строки кода после установки 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;
}

Это должно сделать.

...