Silverlight & WCF: максимальный размер сообщения - PullRequest
4 голосов
/ 01 декабря 2008

Когда я передаю список объектов из моего приложения silverlight с помощью WCF, все работает нормально, пока список не станет слишком большим. Кажется, что когда я превышаю 80 пунктов, я получаю ошибку: Удаленный сервер возвратил неожиданный ответ: (404) Not Found

Я предполагаю, что это потому, что Список стал слишком большим, как тогда, когда в Списке было 70 пунктов, и все работает нормально. Странное сообщение об ошибке, правда?

В файле конфигурации я изменяю maxBufferSize на самое высокое значение, которое он примет, но все же я не могу иметь более 80 элементов в моем Списке.

Как я могу раздавать большие объекты, не разбивая их на части?


Спасибо, Шон, так где именно я это делаю? Это мой ServiceReferences.ClientConfig

<configuration>
<system.serviceModel>
    <client>
      <!--"http://sy01911.fw.gsjbw.com/WcfService1/Service1.svc"-->
      <endpoint address="http://localhost/WcfService1/Service1.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService11"
            contract="SilverlightApplication1.ServiceReference1.IService1"
            name="BasicHttpBinding_IService1" />
    </client>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IService1" maxBufferSize="655360000"
                maxReceivedMessageSize="655360000">
                <security mode="None" />
            </binding>
            <binding name="BasicHttpBinding_IService11" maxBufferSize="655360000"
                maxReceivedMessageSize="655360000">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
</system.serviceModel>


и это конфигурация сервера, которую вы упомянули


<services>
  <service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior" >
    <!-- Service Endpoints -->
    <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1" >
      <!-- 
          Upon deployment, the following identity element should be removed or replaced to reflect the 
          identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
          automatically.
      -->
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="WcfService1.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>

Ответы [ 3 ]

3 голосов
/ 09 июля 2010

Если вы отправляете большое количество элементов из WCF, также убедитесь, что maxItemsInObjectGraph является относительно большим числом

<behaviors>
   <serviceBehaviors>
      <behavior name="YourBahvior">
         <dataContractSerializer maxItemsInObjectGraph="6553600"/>
      </behavior>
   </serviceBehaviors>
</behaviors>
2 голосов
/ 18 декабря 2008

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

  1. Добавить basicHttpBinding конфигурацию в разделе <system.serviceModel>:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
           <bindings>
             <basicHttpBinding>
                <binding name="MyBasicHttpBinding" maxReceivedMessageSize="300000000">
                   <security mode="None"/>
                   <readerQuotas maxStringContentLength="300000000"/>
                </binding>
             </basicHttpBinding>
           </bindings>
    .......
    
  2. Добавить конфигурацию в привязку службы.

    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBasicHttpBinding" contract="WcfService1.IService1">
    
2 голосов
/ 01 декабря 2008

Есть два конфигурационных файла. Серебро клиента clientconfig позволит вам отправить сообщение большего размера, но если вы используете WCF, существует сервер web.config, который ограничивает размер полученного сообщения (чтобы предотвратить атаки DDOS).

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