我正在使用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
{
// ...
有人能指出我正确的方向吗?
答案 0 :(得分:1)
我也遇到了很多这方面的问题。我错过了三个细节。
name
。这应该是完全限定的服务名称。 (即 Namespace.ClassName )您必须提供端点的精确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>
必须同时指定maxReceivedMessageSize
和maxBufferSize
<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客户端来与之交互。