同一合同的不同绑定

时间:2012-08-09 00:37:18

标签: wcf wcf-binding wcf-client

我的操作合同的wcf服务如下。

[OperationContract]       
bool IsUserAvailable(string userName);

[OperationContract]
[WebInvoke(
    Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    UriTemplate = "CreateUser?userId={userId}")]
bool CreateUser(string userId);

注意一个是使用webInvoke属性定义的。我有2个使用这些方法的应用程序。应用程序1通过http Web请求调用createUser方法,而应用程序2(wcf客户端)直接调用IsUserAvailable。如果我尝试在下面的web.config中定义基本的http绑定和webhttpBinding - 我遇到问题。(绑定实例已经与侦听URI'http:// localhost:xxxx / BookStore.svc'关联。如果两个端点想要共享相同的ListenUri,它们还必须共享相同的绑定对象实例。两个冲突的端点要么在AddServiceEndpoint()调用中,在配置文件中,要么在AddServiceEndpoint()和config的组合中指定。)

  <endpoint binding="basicHttpBinding" contract="BookStore.IBook" address=""></endpoint>

  <endpoint address=""
            binding="webHttpBinding"
            behaviorConfiguration="webBehavior"
            contract="BookStore.IBook" />

  <endpoint address="mex"
              binding="mexHttpBinding"
              behaviorConfiguration="mexBehavior"
              contract="IMetadataExchange" />

我的问题是 - 如何在不遇到问题的情况下为同一合同提供不同的绑定。如果我没有指定basichttp绑定,我得到错误(没有端点监听)

1 个答案:

答案 0 :(得分:4)

你需要有不同的地址 - webHttpBinding和basicHttpBinding(正如你所期望的)都是http方案,所以你需要通过它们的地址来区分这两个端点。