超出WebHttpBinding消息大小配额

时间:2012-05-19 18:36:31

标签: wcf

我收到以下错误:

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应用程序。
  4. 需要超过65536字节的流帮助。

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


    感谢您的回复。

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

     

    创建自定义类并重写WebServiceHost的OnOpening()方法可以解决问题吗?

2 个答案:

答案 0 :(得分:1)

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

  1. 使用配置文件,并在binding元素中进行设置。
  2. 在代码中创建绑定并在那里设置属性。
  3. 要在客户端执行此操作,如果没有配置文件,您需要绕过正常的服务引用代码并自行创建客户端通道。您可以在我的博客文章中看到有关如何在没有自动生成的客户端代理的情况下使用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);
    

    此外,根据您的问题,我认为您可以通过覆盖自定义Web服务主机的OnOpening方法来实现此目的。请注意,基本OnOpening行为可能会创建端点和编辑绑定行为,因此在尝试自己更改绑定配置之前,您需要先让它完成所有这些操作。但是,我不确定你为什么会遇到这些麻烦...

答案 1 :(得分: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>