您好,
我有一个今天使用以下服务的服务
假设我现在需要将其更改为 PerCall instanciated和 SessionMode.NotAllowed ,这是否可行而不会丢失上述任何关键功能?
我已经看到TCP是一个会话绑定协议,这意味着我将不得不使用HTTP绑定,这不像TCP(XML 1.0编码器而不是二进制编码器)那么快。但我仍然不确定这是否会支持回调?
答案 0 :(得分:1)
PerCall
和SessionMode.NotAllowed
比您当前的设置“更不”具体/限制。只要您意识到基本含义,您就可以轻松转换到这些设置:服务实例中的调用之间不再有状态。
那就是说,我不确定我是什么意思“服务中的Singleton包含所有客户端上下文”。你能详细说说吗?我认为你的意思是你在服务实现中的单例(静态字段?)中的保持状态。从PerCall
实例访问它会没问题,只记得你必须提供围绕该状态的锁定。例如,这是您如何维护回调列表。
另外,您对仅作为会话的TCP的理解不正确。请记住,HTTP是建立在TCP之上的协议。是的TCP套接字保持连接一段时间(保持活动状态),因此可以重用它们,但是通过它们发送的消息可以完全不相互关联。所以,如果你坚持使用NetTcpBinding,你会没事的。同样,您可以在技术上通过HTTP传输进行会话。此外,如果您切换到基于HTTP的传输,则 不使用文本编码。您可以通过HTTP传输发送二进制内容,只需要设置一个类似于:
的自定义绑定<bindings>
<customBinding>
<binding name="MyBinaryOverHttpBinding">
<binaryMessageEncoding />
<httpTransport />
</binding>
</customBinding>
</bindings>