2011-05-11 51 views
3

我正在尝试托管支持wshttpbindingbasichttpbinding的WCF服务。 原因是我需要双工和Windows移动客户端的桌面客户端我不这样做。用于双工和非双工端点的WCF OperationContract

假设我有3个OperationContracts,其中2个需要双工,其中1个不需要。

那么是否有可能公开2 OperationContract wsHttpBinding和最后一个与 只是basicHttpBinding

因为当我尝试我得到这个错误:

合同需要会议,但绑定“basicHttpBinding的”不 支持,或没有配置正确 支持它。

有没有办法让这项工作?或者我必须为每个绑定分别创建WCF服务?

感谢您的建议和帮助。

回答

2

每个端点始终公开其所代表的该服务的所有操作的

对于Service1的一种方法和其他两种方法的双工端点,您不能公开您的“基本”端点。

如果您需要具备这种灵活性,您需要创建两个单独的服务实现 - 一个处理双工操作,一个处理其他操作。

+0

没关系,所以没有其他办法,感谢您的快速回复。 – Tan 2011-05-11 11:43:38

+0

如果我更改[ServiceContract(SessionMode = SessionMode.Allowed,CallbackContract = typeof(IProductionCallback))],会发生什么情况。 ?而不是SessionMode = SessionMode.Required – Tan 2011-05-11 12:05:15

+0

@Tan [Microsoft指出](https://msdn.microsoft.com/en-us/library/ms731064(v = vs.110).aspx)“类似事件的行为双工服务只能在会话中使用“,所以推测SessionMode.Allowed不是有效的配置,并且不起作用。 – 2015-07-03 12:59:26

0
<endpoint 
     address="ws" 
     binding="wsHttpBinding" 
     contract="YourNamespace.IMyService" /> 
    <endpoint 
     address="basic" 
     binding="basicHttpBinding" 
     contract="YourNamespace.IMyService" /> 

现在ü可以使用访问从差异的客户服务,

http://localhost/ws 
http://localhost/basic, 

提供,基址是

 <host> 
      <baseAddresses> 
       <add baseAddress="http://localhost/" /> 
      </baseAddresses> 
     </host> 

如果妳访问使用基本URI,会话也不会创建。

+0

这将无法正常工作,因为Windows Mobile不支持双面打印。在我的合同中,我有双工和非双工操作。而我只想在使用basichttpbinding时只公开没有双工的操作。 – Tan 2011-05-11 11:58:31

+0

这将暴露两个端点上的所有三个操作** - 这将工作,但它不是谭寻找.... – 2011-05-11 15:11:49

+0

我不确定basicHttp中的单工通信。 请检查此链接是否适用于您的案件。 http://www.codeproject.com/KB/WCF/double_simplex_wcf.aspx – Raghav 2011-05-11 15:23:51