与WCF服务通话时获取“413请求实体太大”

问题描述:

我有一个WCF服务,Server,它接受来自控制台应用程序Client的请求。当发送数据(这是比较大的),我得到以下异常:与WCF服务通话时获取“413请求实体太大”

System.ServiceModel.ProtocolException: The remote server returned an unexpected response: (413) Request Entity Too Large. ---> System.Net.WebException: The remote server returned an error: (413) Request Entity Too Large. 

我原本以为在配置文件中正确设置的限制,但显然我错了?

这里的Server的相关部分的app.config

<system.serviceModel> 

<services> 
    <service name="Services.Server"> 
    <endpoint bindingConfiguration="LargeWeb" binding="webHttpBinding" contract="Interfaces.IServer" /> 
    </service> 
</services> 

<bindings> 
    <webHttpBinding> 
    <binding name="LargeWeb" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </webHttpBinding> 
</bindings> 

</system.serviceModel> 

而这里的Clientapp.config

<system.serviceModel> 

<client> 
    <endpoint name="serverEndpoint" binding="webHttpBinding" bindingConfiguration="LargeWeb" contract="Interfaces.IServer" /> 
</client> 

<bindings> 
    <webHttpBinding> 
    <binding name="LargeWeb" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </webHttpBinding> 
</bindings> 

</system.serviceModel> 

最后,这是多么Client调用Server的方法:

using (var cf = new WebChannelFactory<IServer>("serverEndpoint", serverAddress)) 
{ 
    var channel = cf.CreateChannel(); 
    channel.SomeMethod(some, arguments); 
} 

我在做什么错?

谢谢你的帮助。

+1

您需要具有maxReceivedMessageSize大小以更正大小。正如你所提到的,你在你的配置中有设置。你可以检查你期望使用Fiddler的kb的响应大小是多少? – Agalo

+0

@Agalo,我现在无法检查,但尺寸肯定高达〜10兆,即相对较大,但没有真正的极端。只需在配置文件中设置maxReceivedMessageSize是不够的?谢谢! – liszt

+0

2147483647是字节数,等于〜2 GB。对于任何更大的内容,请查看[streaming](https://msdn.microsoft.com/en-us/library/ms733742(v = vs.110).aspx)或[chunking](https://msdn.microsoft。 COM/EN-US /库/ aa717050(v = vs.110)的.aspx)。 – Tim

问题在于Client位于UnitTest项目中,并且运行单元测试时出现问题。运行单元测试时,只考虑UnitTest项目的配置文件,因此需要将Server配置的<service>部分复制到其中。

这样一来,只有一个配置文件被使用:ServerClient都读取它的配置。

之后,事情工作正常。