我设置了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>
答案 0 :(得分:1)
配置文件看起来设置正确。
您是否仍然收到错误,或者只是询问是否有更好的方法来做您正在做的事情?消息的大小是否可能大于您当前设置的值?
如果是前者,你看到的错误是什么?
如果是后者,我唯一建议的是将maxReceivedMessageSize的大小设置为一个与您期望服务所需的最大值一样大的值,这样就可以限制您对DDOS攻击的暴露。
答案 1 :(得分:0)
您没有告诉我们,抛出此异常时您发送了什么。根据我的经验,这发生在我将整个对象序列化时,这些对象包含很多属性甚至是集合。
一种方法是在每一侧制作缓冲区并序列化对象,将序列化的结果分解为较小的片段,逐个发送片段,然后将它们放在另一侧并反序列化。至少这解决了这个例外的问题。