在使用消息安全性时,我有一个关于 WCF 客户端通道生命周期的问题,但首先,关于我公司的设置和指南的一些注意事项:
- 我们的客户端-服务器应用程序仅供 Intranet 使用
- 我们的客户是 WPF 应用程序
- 我们公司的 WCF 使用指南是:
- 使用 wsHttpBinding
- 使用消息安全
- 服务实例模式:PerCall
- 服务并发模式:多个
这是我第一次必须在 Intranet 设置上使用消息安全性。以下是我通常如何使用我的客户端通道来限制客户端和服务器上保留的资源量,并且实际上只是为了让事情变得简单:
- 实例化 + 打开通道(使用 ChannelFactory)
- 进行 WCF 调用
- 尽快关闭/处理通道
在使用 Fiddler 2 监控此策略时,我注意到由于 Message Security,单个 WCF 调用最终导致我的服务进行 5 次往返:
- 3 次握手的初始往返
- 实际 WCF 调用的 1 次往返
- 1 次调用以关闭会话(因为我使用的是 PerCall,所以我假设这更像是 IIS 级别的安全会话)
如果我要关闭 Message Security,正如人们所期望的那样,一个 WCF 最终会成为……单次往返。
到目前为止,我必须使用 Message Security,因为这是我们的指导方针。考虑到这一点并知道我们从每个客户端 WPF 应用程序进行数百次 WCF 调用一个会话,因此您是否建议打开客户端通道并保持打开以供重复使用,而不是每次都丢弃它?