我有一个适用于基本查询的 WCF 服务。我从简单的默认开箱即用绑定(bind)(具有默认值的 WSHttpBinding)开始。
数据契约用于自定义对象数组,每个对象的大小约为 6k。当我发送最多 5 个(在单笔交易中)时,效果很好。当我尝试发送 6 个或更多时,出现此错误:
“远程服务器返回错误:(400) 错误请求。”
我研究了一些绑定(bind),并尝试在客户端上设置配置,如下所示:
<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",但这生成了另一个绑定(bind)错误,表示客户端和服务器之间的绑定(bind)可能不匹配,所以我暂时将其删除。 (尽管 Mtom 也在服务器 web.config 中指定。)此外,在我的研究中,我还没有找到每个绑定(bind)属性的清晰简单的描述。
总而言之,我试图回答以下问题:
- 如何获取更大的请求而不生成错误请求错误
- 如何将客户端设置为 Mtom 而不会产生错误
- 是否有关于每个绑定(bind)属性以及如何使用它们的良好基本引用?
最佳答案
这是我为你的 #2 学到的一个技巧:
每次在服务器端对 WCF 进行更改时,请重新编译服务器项目,然后在客户端“更新引用”(右键单击服务引用)。
关于wcf - 微调 WCF 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/982846/