maxReceivedMessageSize в службе Azure WCF слишком мала - PullRequest
1 голос
/ 17 июня 2011

При каждом подключении клиента к отправке данных в службу WCF Azure я получаю эту ошибку:

"Превышена квота максимального размера сообщения для входящих сообщений (65536). Чтобы увеличить квоту, используйтесвойство MaxReceivedMessageSize в соответствующем элементе привязки. "

Я везде читал об установке этого свойства MaxReceivedMessageSize в файлах конфигурации клиента и сервера.Я сделал это.

Однако всякий раз, когда я обновляю ссылку на службу в клиенте, он сбрасывает настройки до значения по умолчанию 65536. (найдено путем изучения файла .svcinfo)

Этоприводит меня к выводу, что проблема должна быть на стороне службы.

Я поместил это в свой файл web.config:

<bindings>
  <basicHttpBinding>
    <!--The basicHttpBinding is used for clients which use the generated code to transmit data; the following settings make it possible to send larger amounts to the service-->
    <binding maxReceivedMessageSize="10000000" receiveTimeout="01:00:00">
      <readerQuotas maxStringContentLength="10000000" />
    </binding>
  </basicHttpBinding>
</bindings>

Теперь во многих сообщениях говорится об именовании привязки иустановка его также в конечных точках службы на стороне сервера.Примерно так:

<services>
   <service name="YourNamespace.YourServiceClass">
       <endpoint name="endpoint1"
             address="http://server:8888/YourService.svc" 
             binding="basicHttpBinding"
             bindingConfiguration="lageMessageTransfer"
             contract="IYourServiceContract" />
   </service>
</services>

Однако у меня нет этих конечных точек службы, и моя служба отлично работает для небольших размеров.

Где еще это нужно установить?

РЕДАКТИРОВАТЬ:

Более подробная информация, Тим, кажется, находится на правильном пути с конечными точками по умолчанию.Я использую конечную точку по умолчанию.Кажется, что вы не можете просто явно определить службу для этой конечной точки по умолчанию.или, если вы можете, я, должно быть, делаю это неправильно.

Однако, похоже, вы можете изменить привязку на конечной точке по умолчанию, как заявлено Ричардом.Это делается просто без указания имени для привязки.Я попытался установить значения в моем сервисе на гораздо более низкие значения, чтобы увидеть, понизило ли их что-то еще, но они полностью игнорируются.Как будто конечная точка по умолчанию просто игнорирует созданную мной привязку.

Для всего моего файла конфигурации:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.diagnostics>
<trace autoflush="true" />
<sources>
  <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
    <listeners>
      <add name="sdt" type="System.Diagnostics.XmlWriterTraceListener" initializeData="logging.e2e" />
    </listeners>
  </source>
</sources>
</system.diagnostics>
<system.web>
<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral,  PublicKeyToken=b77a5c561934e089" />
  </assemblies>
</compilation>
</system.web>
<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding maxReceivedMessageSize="100" maxBufferSize="100" receiveTimeout="00:11:00">
      <readerQuotas maxStringContentLength="100" />
    </binding>
  </basicHttpBinding>
</bindings>

<protocolMapping>
  <add scheme="http" binding="basicHttpBinding" />
</protocolMapping>

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="false" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
<connectionStrings><EDITEDOUT></connectionStrings>
</configuration>

Мысли о том, почему новые параметры привязки не выбираются?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Имя атрибута maxReceivedMessageSize является очень явным - все зависит от того, кто получает сообщение - если вы отправляете большой объем данных, то это служба, если вы получаете большой объем данных обратно из службы, то это клиент. Службе и клиенту не нужно одинаковое значение для этого параметра (в отличие от многих других параметров привязки)

Настройка раздела без имени для привязки должна работать в целом, поскольку в .NET 4 она настраивает привязку для всех, кто явно не указывает конфигурацию с помощью bindingConfiguration. Однако в приведенном выше примере вам необходимо установить maxBufferSize в дополнение к maxReceivedMessageSize, поскольку вы буферизуете вместо потоковой передачи сообщения. MaxBufferSize и maxReceivedMessageSize должны совпадать

0 голосов
/ 17 июня 2011

У вас нет раздела в Web.config на вашей стороне службы? Если вы используете WCF 4.0, возможно, вы используете конечную точку по умолчанию?

Я не знаю, можете ли вы указать привязку для конечной точки по умолчанию, но вы можете попробовать указать конечную точку через раздел Web.config и задать для bindingConfiguration привязку, указанную в вашем разделе.

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