如何使用ClearUserNameBinding更改默认邮件大小?

时间:2014-09-26 14:52:24

标签: wcf wcf-binding

我们在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更改默认邮件大小?

1 个答案:

答案 0 :(得分:0)

我们按照以下步骤找到了解决方案:

http://sureshjakka.blogspot.com.ar/2010/03/changing-message-sizes-in.html

我们修改ClearUserNameBinding的代码:

  1. AutoSecuredHttpTransportElement()构造函数中,将值初始化为可能的最大值

    public AutoSecuredHttpTransportElement()
    {
        MaxReceivedMessageSize = int.MaxValue;
        MaxBufferSize = int.MaxValue;
        MaxBufferPoolSize = long.MaxValue;
    }
    
  2. 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;
    }
    
  3. 注意:确保您拥有&#34; System.Runtime.Serialization&#34;您的参考资料中的3.0.0.0及更高版本。因为如果您使用的是2.0.0.0版,则会出现编译错误,因为此版本不允许在ReaderQuotas上设置属性。

    <强>的Web.config:

    <bindings>
      <clearUsernameBinding>
        <binding name="myClearUsernameBinding" />
      </clearUsernameBinding>
    </bindings>
    

    最后,我们更新服务器和客户端中的引用。