Wcf wsDualHttpBinding达到最大消息长度16384

时间:2016-09-16 15:20:47

标签: wcf wsdualhttpbinding

我无法在我的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中的配置;如果这不是问题,我怎样才能增加配额?

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

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

请注意,您必须使用与配置客户端完全相同的方式配置服务器,并且显然不能将maxbytearrarleh设置为大于maxreceivedmessagesize。 例如,如果服务器没有相同的MaxReceivedMessageSize或其他任何东西,它就不会像你期望的那样工作。

GL

答案 1 :(得分:1)

你完全按照错误告诉你:)

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

在您的项目中,右键单击您的服务&#34; app.config&#34;并选择&#34;编辑WCF配置&#34;从那里点击&#34; Bindings&#34;你应该看到自定义绑定。如果不是右键单击并创建新绑定。从这里你可以改变&#34; ReaderQuotas Properties&#34;我用的是

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

完成后,请继续按&#34;文件&#34;然后&#34;保存&#34;

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

运行您的服务,然后右键单击您的服务引用和&#34;更新服务参考&#34;

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

请注意,虽然设置高值会让你容易受到ddos攻击等的影响,所以找出你需要的东西并在测试后更改它。

希望这有帮助:)

确保您的服务也以管理员身份运行