我正在寻找一整天来解决我的问题(也在StackOverflow上),但不幸的是没有任何效果。我仍然收到错误:
“已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性。”
有数百种解决方案,但基于项目中的.config文件。我有一个WCF服务和Silverlight客户端。它们之间的绑定仅以编程方式设置。
以下是WCF服务配置的块代码:
private ServiceHostBase CreateService(Uri baseAddress)
{
var serviceHost = new ServiceHost(typeof(MyService), new[] { baseAddress });
var endPointWithoutSSL = new BasicHttpBinding()
{
MaxBufferSize = int.MaxValue,
MaxReceivedMessageSize = int.MaxValue,
MaxBufferPoolSize = int.MaxValue,
};
serviceHost.AddServiceEndpoint(typeof(MyService), endPointWithoutSSL, baseAddress.ToString());
return serviceHost;
}
在Silverlight项目中,客户端端点的配置如下所示:
private BasicHttpBinding GetBinding()
{
var securityMode = GetSecurityMode();
var binding = new BasicHttpBinding(securityMode)
{
SendTimeout = TimeSpan.FromMinutes(10),
OpenTimeout = TimeSpan.FromMinutes(10),
CloseTimeout = TimeSpan.FromMinutes(10),
ReceiveTimeout = TimeSpan.FromMinutes(10),
TextEncoding = Encoding.UTF8,
TransferMode = TransferMode.Buffered,
MaxReceivedMessageSize = int.MaxValue,
MaxBufferSize = int.MaxValue,
};
return binding;
}
无论我怎么努力,MaxReceivedMessageSize都会从客户端设置为65k。 Microsoft WCF跟踪工具显示,在抛出超过最大收到邮件大小的异常后。
更有趣的是,在端点中启用BasicHttpSecurityMode.Transport不会导致此错误。 但是,我必须在没有BasicHttpSecurityMode.Transport选项的情况下设置我的端点。
任何帮助都将不胜感激。
由于
答案 0 :(得分:1)
在WCF方面尝试下面的代码,它应该可以工作。
private ServiceHostBase CreateService(Uri baseAddress)
{
var serviceHost = new ServiceHost(typeof(MyService), new[] { baseAddress });
var endPointWithoutSSL = new BasicHttpBinding()
{
MaxBufferSize = int.MaxValue,
MaxReceivedMessageSize = int.MaxValue,
MaxBufferPoolSize = int.MaxValue,
};
endPointWithoutSSL.ReaderQuotas.MaxStringContentLength = int.MaxValue;
endPointWithoutSSL.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
endPointWithoutSSL.ReaderQuotas.MaxDepth = int.MaxValue;
endPointWithoutSSL.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
endPointWithoutSSL.ReaderQuotas.MaxArrayLength = int.MaxValue;
serviceHost.AddServiceEndpoint(typeof(MyService), endPointWithoutSSL, baseAddress.ToString());
return serviceHost;
}