微调WCF绑定

时间:2009-06-11 18:34:07

标签: wcf web-services wcf-binding

我有一个适用于基本查询的WCF服务。我开始只使用默认的开箱即用绑定(WSHttpBinding使用默认值)。

数据契约是针对一组自定义对象的,每个对象的大小约为6k。当我发送最多5个(在单个交易中),它工作正常。当我尝试发送6个或更多时,我收到此错误:

“远程服务器返回错误:(400)错误请求。”

我研究了一些绑定,并尝试在客户端上设置配置:

<binding name="WSHttpBinding_IASRService" closeTimeout="00:10:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
         bypassProxyOnLocal="false" transactionFlow="false" 
         hostNameComparisonMode="StrongWildcard"
         maxBufferPoolSize="50000000" maxReceivedMessageSize="50000000"
         messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
         allowCookies="false">
   <readerQuotas maxDepth="50000000" maxStringContentLength="50000000" 
                 maxArrayLength="50000000" maxBytesPerRead="50000000" 
                 maxNameTableCharCount="50000000" />
   <reliableSession ordered="true" inactivityTimeout="00:10:00"
                enabled="false" />
</binding>

我类似地在服务web.config文件上设置配置,但问题仍然存在。

我还尝试将客户端app.config设置为messageEncoding =“Mtom”,但是这会产生另一个绑定错误,说客户端和服务器之间的绑定可能不匹配,所以我现在就把它拿出来了。 (虽然在服务器web.config中也指定了Mtom。)另外,在我的研究中,我还没有找到每个绑定属性的清晰简单描述。

总之,我想回答以下问题:

  1. 如何获取更大的请求以不生成错误的请求错误
  2. 如何将客户端设置为Mtom而不会产生错误
  3. 是否有关于每个绑定属性以及如何使用它们的良好基本参考?

3 个答案:

答案 0 :(得分:2)

这是一个提示,我为你的#2学习了很难的方法:

每次在服务器端对WCF进行更改时,请重新编译服务器项目,然后在客户端重新编译“更新引用”(右键单击服务引用)。

答案 1 :(得分:1)

开始调试的最佳选择是采取操作方法。我会拔出Fiddler,并确保客户端发送有效请求。

答案 2 :(得分:1)

我终于想通了!

在所有地方,请参阅this question

这解决了我的主要问题(#1)。我仍然在寻找如何配置各种绑定WCF属性的清晰描述。我已经在网上,书籍和MSDN的API文档中查找过了。如果有人知道真正解决的问题,请在此处发布。看起来WCF非常简单,直到你进入绑定细节。