WCF与PerCall,SessionMode.NotAllowed,回调?

时间:2012-04-03 14:25:05

标签: c# wcf session binding

您好,

我有一个今天使用以下服务的服务

  • NETTCPBinding(WAS)
  • 在IIS7中托管
  • PerSession服务
  • SessionMode.Required
  • 回调
  • Singelton on service包含所有客户端上下文

假设我现在需要将其更改为 PerCall instanciated和 SessionMode.NotAllowed ,这是否可行而不会丢失上述任何关键功能?

我已经看到TCP是一个会话绑定协议,这意味着我将不得不使用HTTP绑定,这不像TCP(XML 1.0编码器而不是二进制编码器)那么快。但我仍然不确定这是否会支持回调?

1 个答案:

答案 0 :(得分:1)

PerCallSessionMode.NotAllowed比您当前的设置“更不”具体/限制。只要您意识到基本含义,您就可以轻松转换到这些设置:服务实例中的调用之间不再有状态。

那就是说,我不确定我是什么意思“服务中的Singleton包含所有客户端上下文”。你能详细说说吗?我认为你的意思是你在服务实现中的单例(静态字段?)中的保持状态。从PerCall实例访问它会没问题,只记得你必须提供围绕该状态的锁定。例如,这是您如何维护回调列表。

另外,您对仅作为会话的TCP的理解不正确。请记住,HTTP是建立在TCP之上的协议。是的TCP套接字保持连接一段时间(保持活动状态),因此可以重用它们,但是通过它们发送的消息可以完全不相互关联。所以,如果你坚持使用NetTcpBinding,你会没事的。同样,您可以在技术上通过HTTP传输进行会话。此外,如果您切换到基于HTTP的传输,则 不使用文本编码。您可以通过HTTP传输发送二进制内容,只需要设置一个类似于:

的自定义绑定
<bindings>
    <customBinding>
        <binding name="MyBinaryOverHttpBinding">
            <binaryMessageEncoding />
            <httpTransport />
        </binding>
    </customBinding>
</bindings>