【问题标题】:Change max message size in DataServiceContext更改 DataServiceContext 中的最大消息大小
【发布时间】:2011-04-19 14:30:54
【问题描述】:

我正在使用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 是使用实体框架生成的客户端代理类

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

谁能指出我正确的方向?

【问题讨论】:

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


    【解决方案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>
      

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-27
          • 2014-06-13
          • 1970-01-01
          • 2012-04-01
          • 1970-01-01
          • 2013-09-08
          • 1970-01-01
          相关资源
          最近更新 更多