WCF双工和非双工终结点的OperationContract

3
我正在尝试托管一个支持wshttpbindingbasichttpbinding的WCF服务。 原因是我需要双工来支持桌面客户端,而对于Windows移动客户端则不需要。
假设我有3个操作契约,其中2个需要双工,1个不需要。
所以,是否可以使用wsHttpBinding公开2个操作契约,并且最后一个只使用basicHttpBinding
因为当我尝试时,我收到以下错误消息:

Contract requires Session, but Binding 'BasicHttpBinding' doesn't support it or isn't configured properly to support it.

有没有办法使这个工作?还是我必须为每个绑定创建单独的WCF服务?
感谢您的建议和帮助。
2个回答

2

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

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

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


如果我将 [ServiceContract(SessionMode = SessionMode.Allowed, CallbackContract = typeof(IProductionCallback))] 中的 SessionMode = SessionMode.Required 更改为其他值,会发生什么? - Tan
@Tan Microsoft指出:“双工服务的事件行为仅在会话内起作用”,因此SessionMode.Allowed可能不是有效的配置,也无法正常工作。 - dark_perfect

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访问,会话将不会被创建。


那行不通,因为Windows Mobile不支持双工。而且在我的操作契约中,我有双工和非双工操作。我只想在使用BasicHttpBinding时仅公开没有双工的操作。 - Tan
这将在两个端点上暴露所有三个操作 - 这样可以工作,但这不是谭所寻找的... - marc_s
我不确定basicHttp中的单向通信。请检查此链接是否对您有用。http://www.codeproject.com/KB/WCF/double_simplex_wcf.aspx - Raghav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接