Веб-сервисы перестают отвечать на запросы, когда несколько клиентов подключены с помощью дуплексного связывания с опросом - PullRequest
0 голосов
/ 28 сентября 2010

У меня есть служба дуплекса, где клиенты регистрируются для получения уведомлений.В том же AppPool у меня есть другой, обычный веб-сервис, который используется клиентами для связи с сервером.Отправка чего-либо в этот веб-сервис вызовет уведомление всех подключенных клиентов.Все работает нормально до 12, 13 или более клиентов подключены.Тогда и подписка / получение по дуплексному каналу, и отправка чего-либо другому сервису становятся намного медленнее.Я отключил совместимость с asp.net, и в моем проекте веб-службы нет файла global.asax, который мог бы инициировать сеансы для его замедления.

Мои веб-службы размещены в IIS7 на Windows Server 2008.Обратите внимание, что мои клиенты работают на SL4, но веб-сервисы размещены в .NET 3.5.

Вот несколько выдержек из моего файла web.config:

<bindingExtensions>
<add name="pollingDuplexHttpBinding" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement,System.ServiceModel.PollingDuplex, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />      </bindingExtensions> 



<pollingDuplexHttpBinding>
    <binding name="pollingDuplexHttpBindingConfig"/>
  </pollingDuplexHttpBinding> 



 <service name="WcfDuplexService.NotificationService"
           behaviorConfiguration="ServiceBehavior">
                            <!-- Service Endpoints -->
                            <endpoint address=""
              binding="pollingDuplexHttpBinding"
              bindingConfiguration="pollingDuplexHttpBindingConfig"
              contract="WcfDuplexService.INotificationService"
              behaviorConfiguration="ServiceFullEndpointBehavior">
                            </endpoint>
                            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
                    </service>




<!-- Message Service -->
  <service name="WcfDuplexService.MessageService" 
           behaviorConfiguration="ServiceBehavior">
    <endpoint binding="customBinding"
              bindingNamespace="http://csintra.net/MessageService"
              contract="WcfDuplexService.IMessageService"
              bindingConfiguration="binaryHttpBinding"
              behaviorConfiguration="ServiceFullEndpointBehavior">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service> 


<serviceBehaviors>
                            <behavior name="ServiceBehavior">
      <serviceThrottling maxConcurrentCalls="1024" maxConcurrentSessions="1024" maxConcurrentInstances="1024" />
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->

      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
                    </serviceBehaviors> 

Заранее благодарен.

1 Ответ

0 голосов
/ 27 октября 2010

у нас было то же самое время назад.

все выглядит хорошо, что вы только что описали, кроме ваших настроек. вы не указали тайм-аут неактивности, тайм-ауты открытия / закрытия в конфигурации привязки для обслуживания. пожалуйста, установите их соответственно. Вы можете проверить MSDN, что работает с вами.

Попробуйте только один экземпляр во время обслуживания. но с моделью множественного параллелизма. после нагрузочного теста мы нашли лучший подход в нашем случае.

Загрузите тестирование вашего дуплексного сервиса, проверьте счетчики производительности во время нагрузочного теста, чтобы увидеть, что происходит на вашем сервере, если ОЗУ / процессор имеют проблемы. Рабочий процесс IIS останавливается? Пожалуйста, проверьте эти вещи.

можно гуглить о счетчике производительности.

Включить трассировку WCF !!! Может быть, внутри есть некоторые проблемы, которые не появляются.

Реализуйте свою пользовательскую трассировку в своем приложении, чтобы увидеть, что происходит. (необязательно, но было очень полезно в нашем случае.)

Пересмотрите свою архитектуру / дизайн вашего дуплексного сервиса.

ознакомьтесь с правилами дуплексной службы WCF. Рекомендации по производительности для msdn. (очень полезно)

Включите многопоточную модель службы, если вы устанавливаете режим параллелизма = multi и instance = 1.

С уважением,

Мажар Карими

...