0

我收到以下错误:

The maximum message size quota for incoming messages (65536) has been exceeded.
To increase the quota, use the MaxReceivedMessageSize property on
the appropriate binding element.
  1. 我正在使用使用 REST 服务的 WebhttpBinding。
  2. 客户端没有配置设置。
  3. 我正在使用 MVC3 应用程序。

在超过 65536 字节的流中需要帮助。

有什么方法可以编辑 ServiceHostFactory 行为,以便我可以将 MaxReceivedMessageSize 属性设置为 2GB


感谢您的答复。

由于我使用的是 WebHttpBinding,我想知道如何覆盖 ServiceHostFactory 。

创建一个自定义类并覆盖 WebServiceHost 的 OnOpening() 方法可以解决问题吗?

4

2 回答 2

1

MaxReceivedMessageSize是绑定元素的属性;如果您需要从默认值更改它,您有两个选项:

  1. 使用配置文件,并从binding元素中设置它。
  2. 在代码中创建绑定并在那里设置属性。

要在客户端执行此操作,无需配置文件,您需要绕过正常的服务参考代码并自己创建客户端通道。您可以在我的博客文章中看到如何在没有自动生成的客户端代理的情况下使用 WCF 的示例:Proxy-Free WCF。本质上,您在代码中执行以下操作:

var binding = new WebHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;

var factory = new ChannelFactory<IServiceInterfaceChannel>(binding);
var client = factory.CreateChannel(new Endpoint(SERVICE_URL));

如果需要改变服务端的行为,可以通过调用AddServiceEndpoint服务宿主类来指定绑定,例如:

var host = new WebServiceHost();
var binding = new WebHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;

host.AddServiceEndpoint(typeof(IServiceInterface), binding, SERVICE_URL);

另外,我认为您可以根据您的问题通过覆盖OnOpening自定义 Web 服务主机的方法来完成此操作。请注意,基本OnOpening行为可能会创建端点并编辑绑定行为,因此您需要先让它完成所有这些,然后再尝试自己更改绑定配置。但我真的不知道你为什么要这么麻烦...

于 2012-05-20T03:36:53.567 回答
1

最简单的方法是在 web.config 中配置它,如果需要,您可以稍后更改它。首先在您的 web.config 或 app.config 中创建如下所述的绑定配置

 <bindings>
   <basicHttpBinding>
    <webHttpBinding>
    <binding name="Binding_Name" maxReceivedMessageSize="2147483647">
    </binding>
   </webHttpBinding>
  </bindings>

然后在您的服务端点中提及相同的内容,如下所示

<services>
<service behaviorConfiguration="ServiceBehaviour" name="Servicename">
<endpoint address="" binding="webHttpBinding" bindingConfiguration="Binding_Name" contract="Contractname" />
</service>
</services>
于 2015-01-14T05:19:05.997 回答