我使用WCF实现了一小组REST服务。其中一项服务收到大量数据。在调用它时(这是从visual studio运行它 - 我还没有将它部署到生产服务器上)我收到错误
远程服务器返回错误:(413)请求实体太大。
我的网络配置
<binding name="BasicHttpBinding_ISalesOrderDataService"
closeTimeout="00:10:00"
openTimeout="00:10:00"
receiveTimeout="00:10:00"
sendTimeout="00:10:00"
allowCookies="false"
bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647"
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647"
textEncoding="utf-8"
transferMode="Buffered"
useDefaultWebProxy="true"
messageEncoding="Text">
<readerQuotas maxDepth="2000000"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None"
proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName"
algorithmSuite="Default" />
</security>
</binding>
答案 0 :(得分:4)
似乎超过配额会增加这些价值。
maxReceivedMessageSize="2000000" maxBufferSize="2000000">
(或在可能的情况下查看您的查询以获得较低的结果)
如果没有任何效果,请点击此处查看comon probleme。
The remote server returned an error: (413) Request Entity Too Large
答案 1 :(得分:3)
我担心您的客户端没问题,但您需要检查服务器web.config
以与客户端相同的方式增加价值
<bindings>
<basicHttpBinding>
<binding maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
<readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
答案 2 :(得分:3)
除了增加消息大小和缓冲区大小引号外,还要考虑增加序列化程序的 maxItemsInObjectGraph 。如果您的对象内部具有复杂的结构或对象数组,则可能很重要。 我们的典型设置看起来如此
<behaviors>
<endpointBehaviors>
<behavior name="GlobalEndpoint">
<dataContractSerializer maxItemsInObjectGraph="1365536" />
</behavior>
</behaviors>
<serviceBehaviors>
<behavior name="GlobalBehavior">
<dataContractSerializer maxItemsInObjectGraph="1365536" />
</behavior>
</serviceBehaviors>
另外还有Zwan提出的建议
答案 3 :(得分:2)
如果我理解正确,您的请求就是提供大量数据的请求。这意味着您必须编辑像@Zwan所写的maxRecievedMessageSize。不在客户端的配置中,而是在其他服务配置中允许大量数据请求。
答案 4 :(得分:2)
尝试在web.config文件中增加&#34; maxItemsInObjectGraph&#34; 大小,因为此更改对我有用。有关详细信息,请参阅。
答案 5 :(得分:1)
如果您在asp.net应用程序中托管wcf rest服务,还必须设置 httpRuntime 限制因为wcf服务在ASP .NET兼容模式下运行。请注意, maxRequestLength 具有以千字节为单位的值
<configuration> <system.web>
<httpRuntime maxRequestLength="10240" /> </system.web> </configuration>
请参阅The remote server returned an error: (413) Request Entity Too Large
更多建议应该使Dispose,析构函数服务
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple, MaxItemsInObjectGraph = 2147483647)]
[GlobalErrorBehaviorAttribute(typeof(GlobalErrorHandler))]
public partial class YourService : IYourService
{
// Flag: Has Dispose already been called?
bool disposed = false;
// Instantiate a SafeHandle instance.
SafeHandle handle = new SafeFileHandle(IntPtr.Zero, true);
// Public implementation of Dispose pattern callable by consumers.
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Protected implementation of Dispose pattern.
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing)
{
handle.Dispose();
// Free any other managed objects here.
//
}
// Free any unmanaged objects here.
//
disposed = true;
}
~YourService() // destructor
{
Dispose();
}
}
希望它有所帮助!
答案 6 :(得分:1)
从maxRecievedMessageSize开始,您可以检查&#34; IIS请求过滤&#34; 其中请求中内容的最大长度,以字节为单位
同样在IIS中 - “UploadReadAheadSize”,可防止上传和下载大于49KB的数据。默认情况下,该值为49152字节,最多可增加到4 GB。