WCF 绑定和流传输模式有一个有趣的问题,我们无法解决:
我们有一个配置为流传输模式的 WCF 端点。端点接收到的消息比默认大小(~65 KB)大得多。因此,我们在绑定标记的 maxReceivedMessageSize 属性中指定了更大的消息大小。
问题是当我们将端点和绑定配对时绑定配置属性上的endpoint标签和name属性上的binding标记时,我们收到以下错误:“远程服务器返回错误:(400) 错误请求”。
一旦我们删除这两个属性绑定配置 and name它工作没有错误。
这是服务的定义endpoint:
<service name="Services.DocumentService" behaviorConfiguration="ServiceBehavior">
<endpoint contract="ServiceContracts.IDocumentService" address="DocumentService"
binding="basicHttpBinding" name="basicHttpBinding"
bindingConfiguration="BindingConfiguration" <---- when this goes away
behaviorConfiguration="ServiceEndpointBehavior"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/Documents/"/>
</baseAddresses>
</host>
</service>
这里是绑定配置:
<binding
name="BindingConfiguration" <---- and when this goes away
transferMode="Streamed" maxReceivedMessageSize="2147483647" >
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
因此它只能用作默认绑定(没有显式命名的键)。奇怪的是,我们能够通过服务主机上的反射来验证在这两种情况下绑定配置是否实际应用(maxReceivedMessageSize 设置正确)。这可能是 WCF 中的一个错误吗?
该服务是自托管的。
有什么想法非常值得赞赏吗?
当您删除绑定配置 =“BindingConfiguration”时,它使用默认值而不是绑定配置中的值。
区别在于:
transferMode="Streamed"
默认情况下,传输模式是缓冲的,因此如果客户端期望缓冲并且服务器使用流式传输,那么您会收到错误请求错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)