Производительность службы WCF - PullRequest
0 голосов
/ 07 июля 2011

У нас следующая ситуация:

  1. Сценарий 1

    WCF служба размещена на Сервер # 1 .Клиентское приложение, которое может вызывать несколько потоков, каждый поток имеет свой собственный набор данных, с которым он работает, каждый поток вызывает WCF сервис, отправляющий запись по записи для обработки.Это клиентское приложение размещено на том же сервере # 1 .Производительность отличная, скажем, 100 т / с легко с 20 работниками.

  2. Сценарий 2

    WCF Сервис размещен на Сервер # 1 Клиентское приложение размещено на сервере # 2 Производительность снижается со 100 до 10 tps.

Аппаратное обеспечение Сервер # 1 и Сервер № 2 идентичны.Оба сервера имеют Windows Server 2008 R2.Нет проблем с сетью, таких как потеря карманов или что-то в этом роде, сеть в порядке.Basic HTTP Binding используется.В обоих сценариях клиент вызывает сервис на полную URI.

Есть идеи, почему производительность так сильно падает в сценарии 2?

Спасибо

Как ответ на некоторые вопросы ниже:

На самом деле он не учитывает, что делает клиент, это приложение, которое может вызывать, скажем, 25 потоков, каждый поток является клиентом для службы со своим собственным инициализированным клиентом.Вот обязательные настройки:

<basicHttpBinding>
                <binding 
                    name="basicHttp" 
                    closeTimeout="00:10:00" 
                    openTimeout="00:10:00"
                    receiveTimeout="00:10:00" 
                    sendTimeout="00:10:00"                     
                    bypassProxyOnLocal="true"                     
                    maxBufferSize="65536" 
                    maxBufferPoolSize="5242880" 
                    maxReceivedMessageSize="65536"
                    messageEncoding="Text" 
                    textEncoding="utf-8" 
                    transferMode="Buffered"
                    useDefaultWebProxy="true">
                   <readerQuotas maxDepth="32" maxStringContentLength="81920"    maxArrayLength="163840"
                    maxBytesPerRead="409600" maxNameTableCharCount="163840" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding> 

Но я перепробовал все возможные комбинации.Также я должен упомянуть, что у нас есть другой клиент, разработанный на Java, использующий тот же сервис через сеть, использующий привязку Basic HTTP и не имеющий проблем с производительностью.

1 Ответ

1 голос
/ 07 июля 2011

Я думаю, что замедление вызвано необходимостью передачи данных с сервера на клиент.Попробуйте установить для привязки TransferMode значение Streamed.У меня была ситуация, когда крупный объект должен был быть передан клиенту, и эта настройка мне очень помогла ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...