Wcf 如何使用ClearUserNameBinding更改默认消息大小?

Wcf 如何使用ClearUserNameBinding更改默认消息大小?,wcf,wcf-binding,Wcf,Wcf Binding,我们在WCF服务中使用了ClearUserNameBindig 当我们试图返回一条记录超过3k的消息时,我们收到了以下错误: 已超过传入邮件的最大邮件大小配额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性 我们尝试这样修改web.config: <bindings> <clearUsernameBinding> <binding name="myClearUsernameBinding"

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

我们通过以下步骤找到了解决方案:

我们修改
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;
    }
    
  • 注意:确保您的参考中有“System.Runtime.Serialization”3.0.0.0及以上版本。因为如果您有版本2.0.0.0,您将得到编译错误,因为此版本不允许在ReaderQuotas上设置属性

    Web.config:

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

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

    Downvoter,您能解释一下原因吗?