WCF绑定配置仅作为默认配置应用,但命名时失败

时间:2012-03-28 15:15:50

标签: wcf configuration wcf-binding

我们无法解决WCF绑定和流传输模式的一个有趣问题:

我们将WCF端点配置为流传输模式。端点接收的消息比默认大小(~65 KB)大得多。因此,我们在绑定标记的maxReceivedMessageSize属性中指定了更大的消息大小。

问题是当我们通过端点标记上的 bindingConfiguration 属性和 name 属性对端点和绑定进行配对时绑定标记,我们收到以下错误:“远程服务器返回错误:(400)错误请求”。

只要我们删除属性 bindingConfiguration name ,它就可以正常运行。

以下是服务端点的定义:

    <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中的错误吗?

该服务是自托管的。

非常感谢任何想法?

2 个答案:

答案 0 :(得分:0)

删除bindingConfiguration =“BindingConfiguration”时,它使用默认值而不是绑定配置中的值。

区别在于:

transferMode="Streamed"

默认情况下,传输模式是缓冲的,因此如果客户端需要缓冲并且服务器使用流式传输,则会出现错误的请求错误。

答案 1 :(得分:0)

我们最近发现初始化代码明确使用了默认设置,因此忽略了web.config中的那些。

我们删除了那部分代码,并且应用了web.config中的设置。

一个愚蠢的错误。

感谢大家的回答