Wcf wsDualHttpBinding 达到最大消息长度 16384

Wcf wsDualHttpBinding Max message length 16384 reached

我无法在我的 WCF 服务上使用 wsDualHttpBinding 端点。 我在客户端遇到了这个问题。

我得到一个异常,建议从 16384 增加 MaxArrayLength 以允许读取整个 xml 数据。

我尝试了以下配置:

 <system.serviceModel>
    <bindings>
      <wsDualHttpBinding>
        <binding name="MyBinding" maxReceivedMessageSize="2147483647" />
      </wsDualHttpBinding>
    </bindings>

    <client>
      <endpoint name="WSDualHttpBinding_IDataService" binding="wsDualHttpBinding" bindingConfiguration="MyBinding"
        address="http://localhost:8733/DataProvider/" contract="DataStorageService.IDataService" >
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>

但是上面的配置好像被忽略了

我这样实例化我的客户端:

  var instanceContext = new InstanceContext( new CallbackHandler() );
  _clientService = new DataServiceClient( instanceContext );

我在某处读到这些代码行覆盖了 app.config 中的配置;如果那不是问题,我该如何增加配额?

感谢任何帮助。

你完全按照错误告诉你的去做:)

为此,最好直观地了解如何操作,而不是复制和粘贴代码。

在您的项目中,右键单击您的服务 "app.config",然后从那里选择 "Edit WCF Configuration",然后单击 "Bindings",您应该会看到您的自定义绑定。如果不是,只需右键单击并创建一个新绑定。从这里你可以改变 "ReaderQuotas Properties" 我使用的是

MaxArrayLength = 2147483647
MaxBytesPerRead = 4096
MaxDepth = 32
MaxNameTableCharCount = 2147483647
MaxStringContentLength = 2147483647

完成后,继续按 "File",然后按 "Save"

现在去查看您的 app.config 代码,它应该已经更新了。

运行 您的服务,然后右键单击您的服务引用和 "Update Service Reference"

现在,如果您查看您的客户端 app.config 文件,它应该与您的服务 app.config 属性相匹配。如果不是这种情况,请再次右键单击您的客户端 app.config 和 "Edit WCF Configuration",转到绑定,然后选择您的服务端点并将值更改为与服务相同的值。

请注意,将值设置得太高会使您容易受到 ddos​​ 攻击等。因此请找出您需要的内容并在测试后进行更改。

希望这对您有所帮助:)

确保您的服务运行也是管理员

您需要配置的不仅仅是 maxReceivedMessageSize。 正如 Jonathan Coffey 所说,有 BytePerRead、TableCharCount、StringContentLenght 等。 您还必须配置 readerQuotas :https://msdn.microsoft.com/en-us/library/ms731325(v=vs.110).aspx

请注意,您必须以与配置客户端完全相同的方式配置服务器,显然,您不能将 maxbytearraylengh 设置为不大于 maxreceivedmessagesize。 例如,如果服务器没有相同的 MaxReceivedMessageSize 或其他内容,它将无法按您预期的那样工作。

GL.