2012-04-03 20 views
1

嗨,WCF与PerCall,SessionMode.NotAllowed,回调?

我有一个使用下面的今天

  • NetTcpBinding的(WAS)
  • 托管在IIS7
  • PerSession服务
  • 服务SessionMode.Required
  • Callbacks
  • Singelton on ser保存所有客户端副上下文

说我现在需要实例化这种改变为PerCallSessionMode.NotAllowed,这是更多钞票没有丢失任何我的上述关键functionalitys的?

我已经看到,TCP是一个会话绑定protocoll,这意味着我将不得不使用HTTP绑定女巫的速度不如TCP(XML 1.0编码器,而不是二进制编码器)。但我仍然不确定这是否会支持例如回调?

回答

1

PerCallSessionMode.NotAllowed比您当前的设置“较少”特定/限制。只要您意识到基本含义,您应该可以轻松地转换到这些设置:在服务实例的调用之间没有更多的状态。

这就是说,我不确定我是否理解“单件服务包含所有客户端上下文”的含义。你能详细说明吗?我认为你的意思是你在服务实现中的单态(静态字段?)内持有状态。从PerCall实例访问它会很好,只要记住你必须提供围绕该状态的锁定。例如,这是如何维护回调列表的。

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

<bindings> 
    <customBinding> 
     <binding name="MyBinaryOverHttpBinding"> 
      <binaryMessageEncoding /> 
      <httpTransport /> 
     </binding> 
    </customBinding> 
</bindings> 
+0

我怎么能欠幅无会话与netTCP? – Banshee 2012-04-03 19:22:28

+0

当你说“无时间”时,你说什么水平?如果您只是更改为PerCall模式,则不再有逻辑WCF会话。这表示您的TCP连接仍然会与服务器保持会话,以尽可能有效地进行多个呼叫。这些设置由NetTcpBinding本身的设置通过默认值为10的MaxConnections属性来控制。 – 2012-04-03 19:32:51

+0

好吧,但我的意思是在服务接口上,如果我设置了SessionMode.NotAllowed,那么netTCP似乎无法工作? – Banshee 2012-04-04 06:51:03