已超出传入邮件的最大邮件大小限额(65536)

时间:2011-07-08 17:47:41

标签: wcf wcf-data-services

我设置了app.config文件,以便maxRecievedMessageSize远远超过65536,我可以获得任何提示以改善这一点吗?

这是我当前的app.config文件

<bindings>
  <basicHttpBinding>
    <binding
     name="FinalInspectionEndpoint"
     maxBufferSize="2147483647"
     maxReceivedMessageSize="2147483647" >
      <security mode="None" />
      <readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000" />
    </binding>
  </basicHttpBinding>
</bindings>


<services>
  <service name="AGY.FI.SQLService.FinalInspectionManager">
    <endpoint address="" binding="basicHttpBinding" contract="AGY.FI.SQLService.FinalInspectionService" bindingConfiguration="FinalInspectionEndpoint">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"  />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8732/Design_Time_Addresses/AGY.FI.SQLService/Service1/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- 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="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>

2 个答案:

答案 0 :(得分:1)

配置文件看起来设置正确。

您是否仍然收到错误,或者只是询问是否有更好的方法来做您正在做的事情?消息的大小是否可能大于您当前设置的值?

如果是前者,你看到的错误是什么?

如果是后者,我唯一建议的是将maxReceivedMessageSize的大小设置为一个与您期望服务所需的最大值一样大的值,这样就可以限制您对DDOS攻击的暴露。

答案 1 :(得分:0)

您没有告诉我们,抛出此异常时您发送了什么。根据我的经验,这发生在我将整个对象序列化时,这些对象包含很多属性甚至是集合。

一种方法是在每一侧制作缓冲区并序列化对象,将序列化的结果分解为较小的片段,逐个发送片段,然后将它们放在另一侧并反序列化。至少这解决了这个例外的问题。