Регулирование службы WCF - PullRequest
       10

Регулирование службы WCF

17 голосов
/ 26 января 2009

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

Если я реализую это с помощью WCF, будет ли WCF ограничивать службу в зависимости от того, сколько памяти занимает каждый запрос для обслуживания? Или я буду постоянно получать исключения из памяти каждый раз, когда получаю большое количество обращений к своему сервису?

Мне довольно любопытно, что касается решения этой проблемы вне WCF, я все еще немного новичок в разработке сервисов ...

Ответы [ 3 ]

13 голосов
/ 26 января 2009

Хотя использование атрибутов привязки и читательских квот, как предлагает Эндрю Хейр, позволит практически неограниченный размер для большинства практических целей, имейте в виду, что вы столкнетесь с другими проблемами, такими как тайм-ауты, если вы примете длительную команду, как эта служба построена (с использованием WCF или нет).

Независимо от того, какой размер вашего сообщения, служба WCF должна быть сокращена для обеспечения производительности, чтобы она не была загружена. Если вы размещаете его в IIS или WAS, у вас будут дополнительные встроенные функции для тех хостинговых сред, которые сделают ваш сервис более «высокодоступным». Тем не менее, вам все равно нужно обратить внимание на проблемы параллелизма. Следующая конфигурация WCF предоставляет пример установки некоторых значений регулирования.

   <system.serviceModel>

    ...

     <behaviors>
       <serviceBehaviors>
         <behavior name="GenericServiceBehavior">
           <serviceTimeouts transactionTimeout="00:09:10"/>
           <serviceThrottling
             maxConcurrentCalls="20"
             maxConcurrentSessions="20"
             maxConcurrentInstances="20"
           />
         </behavior>
       </serviceBehaviors>
     </behaviors>
   </system.serviceModel>
3 голосов
/ 26 января 2009

Если вы используете NetTCPBinding или NetNamedPipeBinding, вы можете использовать свойство MaxConnections:

<bindings>
  <netTcpBinding>
    <binding name="myTCPBinding" maxConnections="15"/>
  </netTcpBinding>
</bindings>
3 голосов
/ 26 января 2009

WCF имеет ограничение размера полезной нагрузки по умолчанию, которое будет отклонять сообщения на определенное количество байтов. Конечно, это настраивается в разделе привязки вашего файла конфигурации. Вот грубый пример с basicHttpBinding, показывающим многие доступные вам атрибуты:

<bindings>
    <basicHttpBinding>
        <binding name="testBinding" maxReceivedMessageSize="2147483647">
            <readerQuotas
              maxDepth="2147483647"
              maxStringContentLength="2147483647"
              maxArrayLength="2147483647"
              maxBytesPerRead="2147483647"
              maxNameTableCharCount="2147483647" />
        </binding>
    </basicHttpBinding>

Идея состоит в том, что вы можете создать много разных привязок, которые вы можете использовать для разных сценариев. Это хорошо, поскольку вы можете точно настроить, как используются ваши службы, и увеличить ограничение размера сообщения только для конечных точек, которым они нужны.

...