代码之家  ›  专栏  ›  技术社区  ›  Markus Hütter

WCF设计:同时使用:会话和每次调用机制?

  •  1
  • Markus Hütter  · 技术社区  · 15 年前

    我将使用WCF设计一个WebService,它生成不需要会话的方法(如静态调用,例如:返回有关WebService自身的一些信息)和其他需要会话的方法。

    此外,基于会话的方法使用的工作流应该可以在运行时更改。

    我当前的设计如下:

    有一个在IIS中运行的单例服务,它处理所有的每次调用方法,这些方法也作为基于会话的服务的主机工作。这样,singleton类就知道所有会话,并可以停止正在运行的工作流来交换它们。

    这是一个好的/可能的设计选择吗?
    这是使用通用设计的常见方案吗?
    如果有任何阅读提示,我会很高兴,因为msdn帮助对我没有帮助。

    谢谢你的回答
    -复述

    1 回复  |  直到 15 年前
        1
  •  2
  •   marc_s    15 年前

    使用singleton wcf服务类几乎从来都不是一个好主意——除非您确实只有一个(物理)资源想要防止并发访问,否则它实际上没有意义。

    因为:要么它不支持多线程,但在本例中,它成为了一个巨大的瓶颈——请求严格按顺序处理——一个接一个。对性能不是很好。

    或者,您需要让整个服务多线程意识到——让我告诉您,正确、安全、高效地完成这项工作并不是为胆小鬼准备的。这真的很难纠正,而且要让它表现得很好。

    我真的不认为有必要这样做。

    • 让您的“静态”消息调用(如您所调用的)是每个调用的服务——这些服务易于编程、工作良好、性能良好,不会导致任何多线程问题。

    • 那几个服务电话(希望!)这确实需要一个会话——将它们放在它们自己的服务端点上,每个会话都创建它们,在会话中使用“sessionid”来标识它们。它比每次调用都要多一些工作,但仍然没有多线程编程那么复杂和容易出错。

    WCF会话的资源:

    WCF持久服务的资源(在调用之间保持其状态):

    WCF工作流服务的资源: