我们在WCF服务中使用 ClearUserNameBindig 。
当我们尝试返回超过3k记录的邮件时,我们收到了此错误:
已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性。
我们试图像这样修改web.config:
<bindings>
<clearUsernameBinding>
<binding name="myClearUsernameBinding"
maxReceivedMessageSize="20000000"
maxBufferSize="20000000"
maxBufferPoolSize="20000000" />
<readerQuotas maxDepth="32"
maxArrayLength="200000000"
maxStringContentLength="200000000"/>
</clearUsernameBinding>
</bindings>
但是我们收到了这个错误:
无法识别的属性'maxReceivedMessageSize'。
如何使用ClearUserNameBinding更改默认邮件大小?
答案 0 :(得分:0)
我们按照以下步骤找到了解决方案:
http://sureshjakka.blogspot.com.ar/2010/03/changing-message-sizes-in.html
我们修改ClearUserNameBinding
的代码:
在AutoSecuredHttpTransportElement()
构造函数中,将值初始化为可能的最大值
public AutoSecuredHttpTransportElement()
{
MaxReceivedMessageSize = int.MaxValue;
MaxBufferSize = int.MaxValue;
MaxBufferPoolSize = long.MaxValue;
}
在CreateBindingElements()
方法中创建XMLDictionaryReaderQutotas对象并在TextMessageEncodingBindingElement
上设置相同的对象。以下是此方法的修改版本。
public override BindingElementCollection CreateBindingElements()
{
XmlDictionaryReaderQuotas rqMax = XmlDictionaryReaderQuotas.Max;
TextMessageEncodingBindingElement textBE = new TextMessageEncodingBindingElement();
textBE.MessageVersion = this.messageVersion;
rqMax.CopyTo(textBE.ReaderQuotas);
var res = new BindingElementCollection();
res.Add(textBE);
res.Add(SecurityBindingElement.CreateUserNameOverTransportBindingElement());
res.Add(new AutoSecuredHttpTransportElement());
return res;
}
注意:确保您拥有&#34; System.Runtime.Serialization&#34;您的参考资料中的3.0.0.0及更高版本。因为如果您使用的是2.0.0.0版,则会出现编译错误,因为此版本不允许在ReaderQuotas上设置属性。
<强>的Web.config:强>
<bindings>
<clearUsernameBinding>
<binding name="myClearUsernameBinding" />
</clearUsernameBinding>
</bindings>
最后,我们更新服务器和客户端中的引用。