【问题标题】:WCF OperationContract for both duplex and non-duplex endpoints双工和非双工端点的 WCF OperationContract
【发布时间】:2011-05-11 11:33:28
【问题描述】:

我正在尝试托管支持 wshttpbinding 和 basichttpbinding 的 WCF 服务。 原因是桌面客户端我需要双工,而 Windows 移动客户端我不需要。

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

那么是否可以使用wsHttpBinding 公开 2 个 OperationContract,最后一个使用 只是basicHttpBinding?

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

合同需要 Session,但绑定 'BasicHttpBinding' 不需要 支持或未配置 适当地支持它。

有没有办法让它工作?还是我必须为每个绑定创建单独的 WCF 服务?

感谢您的建议和帮助。

【问题讨论】:

    标签: wcf c#-3.0


    【解决方案1】:

    每个端点总是公开它所代表的服务的所有操作。

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

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

    【讨论】:

    • 如果我更改 [ServiceContract(SessionMode = SessionMode.Allowed, CallbackContract = typeof(IProductionCallback))] 会发生什么。 ?而不是 SessionMode = SessionMode.Required
    • @Tan Microsoft states that“双工服务的类似事件的行为只在会话中起作用”,所以推测 SessionMode.Allowed 不是一个有效的配置,并且不会起作用。
    【解决方案2】:
     <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 想要的......
    • 不确定 basicHttp 中的单工通信。请检查此链接是否对您的情况有用。 codeproject.com/KB/WCF/double_simplex_wcf.aspx
    猜你喜欢
    • 2011-05-05
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2010-09-22
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多