WCF maxReceivedMessageSize не читается из конфигурации
У меня есть следующий сервер app.config на стороне сервера для службы WCF:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="default" maxReceivedMessageSize="5000000">
<readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" />
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="Core.TOAService.Service1Behavior"
name="Core.TOAService.TOAService">
<endpoint address="" binding="wsHttpBinding" contract="Core.TOAService.ITOAService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/Core.TOAService/TOAService/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Core.TOAService.Service1Behavior">
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Когда я пытаюсь передать эту службу довольно большому файлу (всего ~ 250 КБ), я получаю исключение, зарегистрированное в файле svclog:
Максимальная квота размера сообщения для входящие сообщения (65536) были превышены. Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize соответствующий связывающий элемент.
Как вы можете видеть из раздела привязки в верхней части конфигурации, я попытался установить maxReceivedMessageSize на 5000000, но служба по-прежнему считает, что он установлен по умолчанию 65536. Любые идеи относительно того, что не так или что "подходящий" связующий элемент?
Ответы
Ответ 1
Там больше настроек:-) Попробуйте "maxBufferPoolSize" и "maxBufferSize" в теге <binding>
.
Но самая большая проблема заключается в том, что ваша конечная точка ссылается на не ссылку на обязательную конфигурацию!
<endpoint address=""
binding="wsHttpBinding" contract="Core.TOAService.ITOAService">
Вам нужно добавить ссылку на нее, чтобы она стала полезна - просто называть ее "default" не работает.....
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="default"
contract="Core.TOAService.ITOAService">
Вы опережаете свое время;-) В WCF 4 (с .NET 4.0 - иногда в этом году 2009) вы сможете определить "конфигурации привязки по умолчанию", не указывая явно и ссылаясь на них - но на данный момент вам нужно создать связь между вашей конечной точкой и ее привязкой и любой имеющейся у вас конфигурацией привязки (или поведения).
Марк
Ответ 2
Если вы все еще получаете это сообщение об ошибке при использовании тестового клиента WCF, это связано с тем, что у клиента есть отдельный параметр MaxBufferSize.
Чтобы исправить проблему:
- Щелкните правой кнопкой мыши файл Config node в нижней части дерева
- Выберите "Редактировать" с помощью SvcConfigEditor
Появится список редактируемых настроек, включая MaxBufferSize.
Примечание. Автогенерированные прокси-клиенты также устанавливают MaxBufferSize на 65536 по умолчанию.
Ответ 3
Есть несколько мест, которые необходимо установить для размера. В вашем случае я думаю, что вам нужно добавить квитанцию чтения. Вот пример:
<basicHttpBinding>
<binding name="httpBasicBinding_Service" closeTimeout="00:03:00"
openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00"
maxBufferSize="2000001"
maxBufferPoolSize="2000001" maxReceivedMessageSize="2000001">
<readerQuotas maxDepth="2000001" maxStringContentLength="2000001"
maxArrayLength="2000001" maxBytesPerRead="2000001" maxNameTableCharCount="2000001" />
</binding>
</basicHttpBinding>