Почему Справочник услуг WCF не сохраняет некоторые настройки после обмена метаданными? - PullRequest
2 голосов
/ 20 января 2012

Я определяю такую ​​привязку в файле app.config моей службы WCF:

<bindings>
  <netTcpBinding>
    <binding name="Binding1"
             closeTimeout="00:01:00"
             openTimeout="00:01:00"
             receiveTimeout="00:10:00"
             sendTimeout="00:01:00"
             transactionFlow="false"
             transferMode="Buffered"
             transactionProtocol="OleTransactions"
             hostNameComparisonMode="StrongWildcard"
             listenBacklog="10"
             maxBufferPoolSize="524288"
             maxBufferSize="524288"
             maxConnections="10"
             maxReceivedMessageSize="524288">
      <readerQuotas maxDepth="32"
                    maxStringContentLength="8192"
                    maxArrayLength="16384"
                    maxBytesPerRead="4096"
                    maxNameTableCharCount="16384" />
      <reliableSession ordered="true"
                       inactivityTimeout="00:10:00"
                       enabled="false" />
      <security mode="Message">
        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
        <message clientCredentialType="Windows" algorithmSuite="Default" />
      </security>
    </binding>
  </netTcpBinding>
</bindings>

Обратите внимание, что я установил maxBufferSize и maxReceivedMessageSize равными 524288 байт.В моем клиентском проекте, когда я нажимаю «Добавить ссылку на службу», я могу обнаружить и добавить свою службу.Но он заполняет файл app.config моего клиента следующим образом

<bindings>
  <netTcpBinding>
    <binding name="NetTcpBinding_AgileService" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
      hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
      maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00"
        enabled="false" />
      <security mode="Message">
        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
        <message clientCredentialType="Windows" algorithmSuite="Default" />
      </security>
    </binding>
  </netTcpBinding>
</bindings>

Мне любопытно, почему maxBufferSize и maxReceivedMessageSize вернулись к значениям по умолчанию в app.config моего клиента.Эти настройки применяются отдельно к клиенту и серверу?Другими словами, могут ли клиент и сервер иметь свои собственные ограничения размера сообщений?

Есть ли еще что-то, что мне нужно сделать на клиенте, чтобы убедиться, что клиент будет готов отправлять сообщения размером 524288 байт??(Я забочусь только о клиенте -> общение с сервером)

Ответы [ 2 ]

1 голос
/ 20 января 2012

Да, настройки зависят от клиента или сервера (в зависимости от того, с какой конфигурацией вы имеете дело). MaxReceivedMessageSize применяется только к размеру сообщения, получаемого службой или клиентом, а не к размеру отправляемого сообщения.

Вам также может понадобиться увеличить MaxStringContentLength в ReaderQuotas, чтобы обрабатывать сообщения большего размера. Кроме того, вам необходимо убедиться, что вы указали свою конфигурацию Binding1 в своей конечной точке в своей службе (через атрибут bindingConfiguration) в файле конфигурации своей службы, в противном случае ваша служба вернется к настройкам по умолчанию для NetTcpBinding.

Пример:

<services>
  <service behaviorConfiguration="MyBehavior" name="MyService">
    <endpoint address="" binding="netTcpBinding"
              bindingConfiguration="Binding1"
              contract="MyService.IMyContract" />
  </service>
</services>
0 голосов
/ 20 января 2012

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

...