2

我有一个用于基本查询的 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. 是否有关于每个绑定属性以及如何使用它们的良好基本参考?
4

3 回答 3

2

这是我为您的#2 学到的一个技巧:

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

于 2009-06-11T18:48:55.567 回答
1

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

于 2009-06-11T18:43:36.440 回答
1

我终于想通了!

在所有地方,看到这个问题

这解决了我的主要问题(#1)。我仍在寻找有关如何配置各种绑定 WCF 属性的清晰描述。我查看了在线、书籍和 MSDN 的 API 文档。如果有人知道真正说明它的东西,请在此处发布。看起来 WCF 相当简单,直到您了解绑定细节。

于 2009-06-12T22:43:10.817 回答