【问题标题】:ASMX web service reference how to set equivalent to MaxReceivedMessageSizeASMX web 服务参考如何设置 MaxReceivedMessageSize
【发布时间】:2014-07-07 18:19:04
【问题描述】:

Web 服务是一种 ASMX Web 服务(不是 WCF)

我收到一个错误

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

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

谁能帮我弄清楚如何为此方法设置与MaxReceivedMessageSize 等效的值? (如果我使用 WCF,我要求相当于做 HttpBinding.MaxReceivedMessageSize = Int32.MaxValue

【问题讨论】:

  • 你能发布配置文件吗?

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


【解决方案1】:

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

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

【讨论】:

  • 这非常有帮助。谢谢。
  • 据我了解,MaxReceivedMessageSize 仅适用于使用 WCF 作为客户端,因此在这种情况下这无济于事,因为 OP 明确表示他们正在使用网络参考
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    在“旧”中创建的代理没有任何消息配额。

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

    【讨论】:

    • 感谢 Wiktor 的回复...是的,我使用的是“旧”(添加服务参考 > 高级 > 添加 Web 参考)。这将创建一个继承自 SoapHttpClientProtocol 的代理
    • 是否有任何文件表明这种“旧​​”方式没有消息配额?
    • 我已经用了很多年了,没有这个限制。那么异常是从客户端代理还是从服务器抛出的呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2016-12-02
    • 2011-01-10
    相关资源
    最近更新 更多