2012-05-19 45 views
0

我收到以下錯誤:的WebHttpBinding郵件大小超出配額

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()方法可以解決問題嗎?

回答

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); 

此外,我認爲,您可以通過覆蓋自定義Web服務主機的OnOpening方法來完成此任務,根據您的問題。請注意,基礎OnOpening行爲可能會創建端點並編輯綁定行爲,因此在嘗試自行更改綁定配置之前,您首先需要先完成這些操作。但我不確定爲什麼你會去所有的麻煩......

+0

您好,感謝您的答覆。 – user1400915

1

最簡單的方法是在web.config中配置它,你可以稍後在需要時更改它。首先在web.config或app中創建綁定配置,如下所述。配置

<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> 
相關問題