我有一个带有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中)
如何"强制"客户端使用自定义绑定?
谢谢Alex
服务没有使用您指定的绑定。我的猜测是,服务名称实际上是"MyServiceContract.Test2"(或类似的名称),而不仅仅是"Test2",所以当WCF没有找到任何与服务类匹配的<service>
元素时,它只是使用默认端点,而该端点恰好使用basicHttpBinding
。
您是否为自定义绑定定义了一个类(从System.ServiceModel.Channels.binding派生的类)?
如果是,您是否已将新绑定添加到配置绑定扩展中?
<extensions>
<bindingExtensions>
<add name="myCustomeBinding" type="MyCustomeBinding, MyCustomeBindingLibrary" />
</bindingExtensions>
</extensions>
绑定的工作是定义用于创建WCF通道的"配方"。基本上,配方由一系列绑定元素组成。
您在配方中选择的绑定元素决定WCF通道将实现的通信的性质。
在绝对最低限度上,您的结合元素配方需要包括:
- 消息编码(文本/二进制等)
- 传输(HTTP/TCP等)
如果您没有定义绑定的类,那么WCF别无选择,只能根据这两个绑定元素的默认值创建一个通道,因此可能被设计为在没有定义绑定时切换到basicHttpBinding。
那是我的猜测。