添加服务引用时,WCF customBinding是BasicHTTPBinding

时间:2012-01-23 01:08:18

标签: wcf

我有一个带有customBinding端点的WCF服务。

<customBinding>
    <binding name="customBinding" receiveTimeout="00:10:00" sendTimeout="00:10:00" openTimeout="00:10:00" closeTimeout="00:10:00">
      <binaryMessageEncoding>
        <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" />
      </binaryMessageEncoding>
      <httpTransport maxReceivedMessageSize="40194304" />
    </binding>
  </customBinding>     

我的服务是:

<services>
  <service  name="Test2">
     <endpoint address="" binding="customBinding" bindingConfiguration="customBinding" contract="MyServiceContract.ContractInterface">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>

但是,在我的客户端应用程序中,每当我添加服务引用时,结果引用都是BasicHTTPBinding(在app.config中)

我可以做些什么来“强迫”客户端使用自定义绑定?

由于 亚历

2 个答案:

答案 0 :(得分:1)

该服务未使用您指定的绑定。我的猜测是服务名称实际上是“MyServiceContract.Test2”(或类似的东西)而不仅仅是“Test2”,因此当WCF没有找到任何匹配的<service>元素到服务类时,它只是使用了碰巧使用basicHttpBinding的默认端点。

答案 1 :(得分:1)

您是否为自定义绑定定义了一个类(从System.ServiceModel.Channels.Binding派生的类)?

如果是这样,您是否已将新绑定添加到配置绑定扩展中?

<extensions>
  <bindingExtensions>
    <add name="myCustomeBinding" type="MyCustomeBinding, MyCustomeBindingLibrary" />
  </bindingExtensions>
</extensions>

绑定的工作是定义用于创建WCF通道的“配方”。基本上,配方包含一系列绑定元素。

您在配方中选择的绑定元素决定了WCF通道将实现的通信的性质。

在绝对最小值时,您的绑定元素的配方需要包括:

  • 消息编码(文本/二进制等)
  • 传输(HTTP / TCP等)

如果你没有定义绑定的类,那么WCF没有选择,只能根据这两个绑定元素的默认值创建一个通道,因此可能设计为在没有绑定时切换到basicHttpBinding定义。

那是我的猜测。