WCF PollingDuplex с высокими вызовами обратного вызова вызывает исключение обслуживания слишком занятых для новых подписок на услуги - PullRequest
2 голосов
/ 24 марта 2011

В настоящее время я пытаюсь создать дуплексную службу WCF, используя PollingDuplex Binding с SilverLight 4.0.

Моя служба вызывает каждую 1 секунду несколько методов обратного вызова для каждого подключенного клиента.Однако после подключения 2 клиентов новые клиенты получили «Служба, расположенная в ... слишком занята»

Мой сервис использует это поведение:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Multiple)]

Конфигурация привязки WCF:

<pollingDuplexHttpBinding>
  <binding name="" maxOutputDelay="00:00:01" serverPollTimeout="00:05:00"
    inactivityTimeout="02:00:00" duplexMode="MultipleMessagesPerPoll"
    maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
    maxReceivedMessageSize="2147483647">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
      maxArrayLength="2147483647" maxBytesPerRead="2147483647"
      maxNameTableCharCount="2147483647" />
  </binding>
</pollingDuplexHttpBinding>

Поведение службы:

<behavior name="Push">
  <serviceMetadata httpGetEnabled="true"/>
  <serviceDebug includeExceptionDetailInFaults="true"/>
  <serviceThrottling maxConcurrentCalls="2147483647"
    maxConcurrentInstances="2147483647" 
    maxConcurrentSessions="2147483647"/>
</behavior>

Определение службы:

<services>
  <service name="PushService" behaviorConfiguration="Push">
    <endpoint address="" binding="pollingDuplexHttpBinding"
      contract="PushService"/>
    <endpoint address="mex" binding="mexHttpBinding" 
      contract="IMetadataExchange"/>
  </service>
</services>

Любая помощь?Это исключение сводит меня с ума!

Ответы [ 2 ]

0 голосов
/ 17 августа 2012

Я заметил, что у моего программного обеспечения PollingDuplex было ограничение в 10 клиентов при использовании одного Internet Explorer. Ограничение все еще было в отношении компьютера с Windows 2008 Server R2 и Web.config, имеющих много настроек:

для переплета: binding name = "pollingDuplexBinding" maxConnections = "100"

для поведения serviceBehaviors: serviceThrottling maxConcurrentCalls = "1000" maxConcurrentInstances = "1000" maxConcurrentSessions = "1000"

и для опроса дуплекс maxPendingSessions = "2147483647" maxPendingMessagesPerSession = "2147483647"

Но потом, когда я попробовал с разными клиентами:

  • 6 клиентов в IE на сервере
  • 6 клиентов в IE на другом клиентском компьютере
  • 4 клиента в FireFox на этом клиентском компьютере

И это сработало. Таким образом, существует некоторый предел для тех же клиентских подключений.

0 голосов
/ 25 марта 2011

Я думаю, что проблема может быть связана со значением по умолчанию «maxconnection» 2: из System.Net. Можете ли вы попробовать добавить следующую конфигурацию в конфигурацию службы и клиента и проверить, улучшает ли она результаты,

Приведенная выше конфигурация применяется для клиентского приложения, но помните, что PollingDuplex является дуплексным каналом, где служба ведет себя как клиент для операций обратного вызова.

Пожалуйста, найдите красивый блог Wenlong, который объясняет, почему есть требования для вышеуказанной конфигурации, http://blogs.msdn.com/b/wenlong/archive/2009/02/08/why-only-two-concurrent-requests-for-load-testing.aspx

...