2

在使用消息安全性时,我有一个关于 WCF 客户端通道生命周期的问题,但首先,关于我公司的设置和指南的一些注意事项:

  • 我们的客户端-服务器应用程序仅供 Intranet 使用
  • 我们的客户是 WPF 应用程序
  • 我们公司的 WCF 使用指南是:
    • 使用 wsHttpBinding
    • 使用消息安全
    • 服务实例模式:PerCall
    • 服务并发模式:多个

这是我第一次必须在 Intranet 设置上使用消息安全性。以下是我通常如何使用我的客户端通道来限制客户端和服务器上保留的资源量,并且实际上只是为了让事情变得简单:

  1. 实例化 + 打开通道(使用 ChannelFactory)
  2. 进行 WCF 调用
  3. 尽快关闭/处理通道

在使用 Fiddler 2 监控此策略时,我注意到由于 Message Security,单个 WCF 调用最终导致我的服务进行 5 次往返

  • 3 次握手的初始往返
  • 实际 WCF 调用的 1 次往返
  • 1 次调用以关闭会话(因为我使用的是 PerCall,所以我假设这更像是 IIS 级别的安全会话)

如果我要关闭 Message Security,正如人们所期望的那样,一个 WCF 最终会成为……单次往返。

到目前为止,我必须使用 Message Security,因为这是我们的指导方针。考虑到这一点并知道我们从每个客户端 WPF 应用程序进行数百次 WCF 调用一个会话,因此您是否建议打开客户端通道并保持打开以供重复使用,而不是每次都丢弃它?

4

1 回答 1

1

我建议不要抢先关闭功能,直到您知道它们是一个已知问题。预优化是不必要的工作。在您注意到您的客户有滞后问题之前,我不会担心消息安全性。在这一点上,尝试一些事情:让客户保持更长时间开放的方法之一;二、尝试在不关闭消息安全的情况下将请求分组在一起;三、考虑缓存,如果可以的话;四、如果消息安全是最终罪魁祸首,那就换一种方法。我不会因为看到更多的网络流量而关闭某些东西,直到我知道这是我可以做的最后一件事来提高性能。

于 2013-04-18T15:17:16.237 回答