2011-04-19 67 views
2

我正在使用DataServiceContext從託管dbml的wcf服務中獲取數據。它工作在一般正常,但返回大量的數據(例如二進制文件)查詢創建通常WCF錯誤:更改DataServiceContext中的最大郵件大小

The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding 

的問題是我無法找到如何改變渠道的消息大小。

這裏是我用來初始化類的代碼:

var channel = new RPDataModelDataContext(DataServiceBaseAddress); 
channel.Credentials = CredentialCache.DefaultCredentials; 

其中RPDataModelDataContext與的EntityFramework生成的客戶端代理類

public partial class RPDataModelDataContext : 
    global::System.Data.Services.Client.DataServiceContext 
{ 
    // ... 

任何人都可以點我朝着正確的方向?

回答

0

經過一番研究,我發現沒有辦法自定義數據通道服務客戶端。所以我想這是不可能的。

必須創建一個正常的wcf客戶端才能與之交互。

0

編輯:這實際上可能是服務端問題。您應該確保服務配置文件的設置如the answer with most votes.所示您基本上需要將MaxReceivedMessageSize值更改爲比最大預期查詢結果大小稍大的值。我必須將其設置爲高達2 MB而沒有任何問題。

1

我也遇到了很多問題。我錯過了三個細節。

  1. 您必須正確指定服務name。這應該是完全合格的服務名稱。 (即,命名空間。類別名稱
  2. 您必須提供端點的EXACT address。 (參見下面的代碼)

    <services> 
        <!-- The service name below has to be the EXACT Namespace.ClassName of your WCF Data Service--> 
        <service name="YourDomainNameHere.YourClassNameHere"> 
         <!-- The address below must be the EXACT address of your service--> 
         <endpoint address ="http://localhost:19766/YourServiceName.svc" binding="webHttpBinding" bindingConfiguration="higherMessageSize" contract ="System.Data.Services.IRequestHandler"> 
         </endpoint> 
        </service> 
    </services> 
    
  3. maxReceivedMessageSizemaxBufferSize必須都指定

    <bindings> 
        <webHttpBinding> 
         <!-- The maxReceivedMessageSize and the maxBufferSize must both be specified as shown below--> 
         <binding name="higherMessageSize" maxReceivedMessageSize ="2048000" maxBufferSize="2048000"/> 
        </webHttpBinding> 
    </bindings>