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.
我无法在我的 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.