2009-09-14 4 views
3

У меня есть клиент WCF для отправки запроса на услугу. И мой бизнес-код вызывает API-интерфейс клиента для отправки более 300 запросов в секунду. Но мой клиент отправляет только около 50 для обслуживания в соответствии с счетчиками производительности моей службы и WCF ServicePoint.Почему мой клиент отправляет запрос так медленно?

И я увеличил ServicePointManager.DefaultConnectionLimit до 1000 в коде и установил maxConCurrentCalls на 1000 в файле конфигурации службы, но немного улучшился.

Возможно, в WCF-клиенте может быть очередь для запросов на отправку. Есть ли способ настроить его и ускорить мой клиент.

Вот моя конфигурация для клиента:

<basicHttpBinding> 
    <binding name="Binding" closeTimeout="00:01:00" openTimeout="00:01:00" 
     receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
     bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferSize="2000000" maxBufferPoolSize="524288" maxReceivedMessageSize="2000000" 
     messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
     useDefaultWebProxy="false"> 
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" 
      realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
+0

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

+0

Я нашел причину. Существует ограничение потока (50), определенное IIS 6.0. Решение этой проблемы - это мой сервис с настраиваемым хостом. –

ответ

1

Вы можете ударять предел соединения для вне идя соединения HTTP:

<system.net> 
    <connectionManagement> 
    <add address="*" maxconnection="8"/> 
    </connectionManagement> 
</system.net> 

Примечание Значение по умолчанию равно 2.

+0

Это то же самое, что и ServicePointManager.DefaultConnectionLimit? Я обновил его до 1000 в коде. –

+0

Я не думаю, что это то же самое. Попробуйте поместить вышеуказанную конфигурацию в конфигурационный файл вашего клиента wcf. –

+0

устанавливает ServicePointManager.DefaultConnectionLimit в 8 (в любом случае в моем приложении .NET 4), поэтому они кажутся одинаковыми. –