更改DataServiceContext中的最大邮件大小

时间:2011-04-19 14:30:54

标签: c# wcf entity-framework wcf-data-services

我正在使用DataServiceContext从托管dbml的wcf服务获取数据。它通常工作正常但返回大量数据的查询(例如二进制文件)会产生通常的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 

问题是我无法找到如何更改频道的消息大小。

这是我用来初始化类的代码:

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

其中RPDataModelDataContext是使用entityframework生成的客户端代理类

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

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:1)

我也遇到了很多这方面的问题。我错过了三个细节。

  1. 您必须准确指定服务name。这应该是完全限定的服务名称。 (即 Namespace.ClassName
  2. 您必须提供端点的精确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>
    

答案 1 :(得分:0)

编辑:这实际上可能是服务方面的问题。您应确保设置服务配置文件,如the answer with most votes.所示。您基本上需要将MaxReceivedMessageSize值更改为比最大预期查询结果大小稍大的值。我不得不将其设置为高达2 MB而没有任何问题。

答案 2 :(得分:0)

经过一番研究后,我发现无法自定义数据通道服务客户端。所以我想这是不可能的。

必须创建一个普通的wcf客户端来与之交互。