0

我无法在我的 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 中的配置;如果那不是问题,我该如何增加配额?

任何帮助表示赞赏。

4

2 回答 2

2

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

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

总帐。

于 2016-09-20T14:24:35.007 回答
1

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

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

在您的项目中,右键单击您的服务“app.config”并从中选择“编辑 WCF 配置”单击“绑定”,您应该会看到您的自定义绑定。如果不只是右键单击并创建一个新的绑定。从这里您可以更改我使用的“ReaderQuotas 属性”

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

完成后,继续按“文件”,然后按“保存”

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

运行您的服务,然后右键单击您的服务参考和“更新服务参考”

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

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

希望这可以帮助 :)

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

于 2016-09-19T16:30:51.817 回答