WCF 服务返回的意外响应:(413) 请求实体太大
Unexpected response returned by WCF Service: (413) Request Entity Too Large
我已经使用 WCF 实现了一小组 REST 服务。其中一项服务接收大量数据。调用它时(这是从 visual studio 运行它时 - 我还没有将它部署到生产服务器)我得到错误
The remote server returned an error: (413) Request Entity Too Large.
我的网络配置
<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>
您似乎超出配额增加了这些值。
maxReceivedMessageSize="2000000" maxBufferSize="2000000">
(或尽可能检查您的查询以获得较低的结果)
如果没有任何效果,请检查这里是否存在常见问题。
The remote server returned an error: (413) Request Entity Too Large
恐怕你的客户端没问题,但你需要检查一下服务器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>
除了增加消息大小和缓冲区大小引用之外,还考虑增加序列化程序的 maxItemsInObjectGraph。如果您的对象内部具有复杂的结构或对象数组,则可能很重要。
我们的典型设置看起来是这样
<behaviors>
<endpointBehaviors>
<behavior name="GlobalEndpoint">
<dataContractSerializer maxItemsInObjectGraph="1365536" />
</behavior>
</behaviors>
<serviceBehaviors>
<behavior name="GlobalBehavior">
<dataContractSerializer maxItemsInObjectGraph="1365536" />
</behavior>
</serviceBehaviors>
另外还有 Zwan 提出的建议
如果我对您的理解正确的话,您的请求是传送大量数据的请求。这意味着您必须像@Zwan 所写的那样编辑 maxRecievedMessageSize。不在客户端的配置中,而是在其余服务配置中,以允许大数据请求。
如果您在 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();
}
}
希望对您有所帮助!
既然 maxRecievedMessageSize 没问题,你可以检查一下 "IIS Request Filtering"
其中请求内容的最大长度,以字节为单位
同样在 IIS 中 – “UploadReadAheadSize” 阻止上传和下载大于 49KB 的数据。默认值为 49152 字节,最多可增加到 4 GB。
尝试增加 web.config 文件中的 "maxItemsInObjectGraph" 大小,因为此更改对 me.For 有效,详情请参阅。
我已经使用 WCF 实现了一小组 REST 服务。其中一项服务接收大量数据。调用它时(这是从 visual studio 运行它时 - 我还没有将它部署到生产服务器)我得到错误
The remote server returned an error: (413) Request Entity Too Large.
我的网络配置
<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>
您似乎超出配额增加了这些值。
maxReceivedMessageSize="2000000" maxBufferSize="2000000">
(或尽可能检查您的查询以获得较低的结果)
如果没有任何效果,请检查这里是否存在常见问题。
The remote server returned an error: (413) Request Entity Too Large
恐怕你的客户端没问题,但你需要检查一下服务器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>
除了增加消息大小和缓冲区大小引用之外,还考虑增加序列化程序的 maxItemsInObjectGraph。如果您的对象内部具有复杂的结构或对象数组,则可能很重要。 我们的典型设置看起来是这样
<behaviors>
<endpointBehaviors>
<behavior name="GlobalEndpoint">
<dataContractSerializer maxItemsInObjectGraph="1365536" />
</behavior>
</behaviors>
<serviceBehaviors>
<behavior name="GlobalBehavior">
<dataContractSerializer maxItemsInObjectGraph="1365536" />
</behavior>
</serviceBehaviors>
另外还有 Zwan 提出的建议
如果我对您的理解正确的话,您的请求是传送大量数据的请求。这意味着您必须像@Zwan 所写的那样编辑 maxRecievedMessageSize。不在客户端的配置中,而是在其余服务配置中,以允许大数据请求。
如果您在 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();
}
}
希望对您有所帮助!
既然 maxRecievedMessageSize 没问题,你可以检查一下 "IIS Request Filtering" 其中请求内容的最大长度,以字节为单位
同样在 IIS 中 – “UploadReadAheadSize” 阻止上传和下载大于 49KB 的数据。默认值为 49152 字节,最多可增加到 4 GB。
尝试增加 web.config 文件中的 "maxItemsInObjectGraph" 大小,因为此更改对 me.For 有效,详情请参阅。