Почему Справочник услуг WCF не сохраняет некоторые настройки после обмена метаданными?
Я определяю привязку, как это в моей службе WCF app.config
файл:
<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 ответа
Да, настройки зависят от клиента или сервера (в зависимости от того, с каким конфигом вы работаете). MaxReceivedMessageSize
применяется только к размеру сообщения, получаемого службой или клиентом, а не к размеру отправляемого сообщения.
Вы можете увеличить MaxStringContentLength
в ReaderQuotas
а также для обработки больших сообщений. Кроме того, вам необходимо убедиться, что вы указали свою конфигурацию Binding1 в конечной точке своего сервиса (через bindingConfiguration
атрибута) в файле конфигурации вашего сервиса, иначе ваш сервис вернется к настройкам по умолчанию для NetTcpBinding.
Пример:
<services>
<service behaviorConfiguration="MyBehavior" name="MyService">
<endpoint address="" binding="netTcpBinding"
bindingConfiguration="Binding1"
contract="MyService.IMyContract" />
</service>
</services>
Обратите внимание на имя MaxReceivedMessageSize. Это о размере данных, которые получатель данных готов принять. Следовательно, вполне вероятно, что клиент и служба будут хотеть разные значения, поэтому они не являются частью сгенерированных значений из метаданных.