1
1
nettcp总是有一个传输级别的会话在运行-所以这就是为什么您总是有一个sessionid。所以基本上,不管您选择什么,使用nettcp,您都可以从传输层上获得会话连接。 至于instanceContextMode——只要你不需要会话中的任何东西,除了sessionID——没有可靠的消息等——然后我通常会选择每个调用——它更具可伸缩性,通常性能更好,它给你更少的“黏合剂”和你需要的比特和碎片管理。 只有在需要打开可靠的消息传递或其他绝对需要wcf会话的情况下,我才会使用显式必需的会话。如果你没有-那么在我看来这只是不必要的开销。 |
2
1
将sessionmode设置为sessionmode.required将强制使用支持会话的绑定,如nettcpbinding、wshttpbinding等。事实上,如果尝试使用非启用会话的绑定,运行库将在尝试打开主机时引发异常。 将instanceContextMode设置为per session意味着每个会话将只装入服务的一个实例,并且该实例将服务于来自该会话的所有请求。 运行时设置sessionid意味着您可能拥有传输会话、可靠会话或安全会话。拥有这些并不一定意味着您有一个应用程序会话,即为每个代理提供请求的单个服务对象。换句话说,您可以通过设置instanceContextMode=perCall来关闭应用程序会话,强制为每个调用创建新的服务对象,同时由于使用nettcpbinding或可靠或安全会话而维护传输会话。 将instanceContextMode和session模式配置的应用程序会话视为更高级别的会话,依赖于较低级别的会话/安全性、传输或可靠性/。如果没有其他会话中的一个,则实际上无法建立应用程序会话,因此需要绑定。 它已经有点长了,但是对于简单的值,我建议您每次都传递这些值,而不是创建应用程序会话。这将确保服务对象的生命周期很短,并且不会在服务器上保留不必要的资源。如果有更多的客户或代理与您的服务交谈,这是非常有意义的。而且您可以始终在客户机中缓存这些值,如果需要,甚至可以将它们作为自定义头传递。 |
Ehsan Akbar · 当请求被激发时,WCF请求时间会增加 6 年前 |
Gans · 具有多操作合约的WCF Rest服务 6 年前 |
Moelgaard · NLog中的IIS应用程序名称。配置 6 年前 |
Kerwen · WCF服务调用异步函数 6 年前 |