ASMX Web服务引用如何设置等效于MaxReceivedMessageSize

时间:2014-07-07 18:19:04

标签: c# web-services asmx soap-client soaphttpclientprotocol

Web Service是ASMX Web服务(非WCF)

我收到错误

  

已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性

当您添加“Web引用”时,我正在使用Visual Studio为您生成的代理(请注意我不添加“服务引用”,而是使用Web引用)...这会创建一个代理,继承自SoapHttpClientProtocol

任何人都可以帮我弄清楚如何为这种方法设置等效的MaxReceivedMessageSize吗? (如果我使用WCF,我要求相当于做HttpBinding.MaxReceivedMessageSize = Int32.MaxValue

3 个答案:

答案 0 :(得分:4)

也许它对某人有所帮助。我在ASMX Web服务中收到相同的错误消息,但这不是来自服务器!它来自客户端,我只是将其添加到客户端配置:

<basicHttpBinding>
<binding name="BindingName" maxBufferPoolSize="20000000" maxReceivedMessageSize="20000000" maxBufferSize="20000000" />
</basicHttpBinding>

答案 1 :(得分:3)

此消息特定于WCF。我怀疑你是通过WCF客户端代理调用你的ASMX服务(客户端类继承自ClientBase)。另一方面,典型的ASMX客户端代理继承自SoapHttpClientProtocol

诀窍是,如果你只是&#34;添加服务参考&#34;在Visual Studio中,默认情况下会创建类似WCF的代理。要创建旧类型代理,您应该单击&#34;高级&#34;在代理创建者对话框上然后&#34;添加网络参考&#34;在高级属性对话框上或从命令行调用wsdl.exe工具。

在&#34; old&#34;中创建的代理没有任何消息配额。

尽管如此,使用旧版ASMX技术,不建议用于服务器和客户端

答案 2 :(得分:3)

在调用服务方法之前,可以在App.config文件或源代码中完成MaxReceivedMessageSize更改。

 BasicHttpBinding httpBinding = youAddWebServiceName.ChannelFactory.Endpoint.Binding as BasicHttpBinding;
 httpBinding.MaxReceivedMessageSize = int.MaxValue;