WCF设计:使用:会话和每个呼叫机制?

时间:2010-02-16 11:31:14

标签: wcf session workflow-foundation

我将使用WCF设计一个Web服务,它产生不需要会话的方法(如静态调用,例如:自己提供有关Web服务的一些信息)以及需要会话的其他方法。

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

我目前的设计看起来像这样:

在IIS中运行的单件服务处理所有每个调用方法,这些方法也可用作基于会话的服务的主机。通过这种方式,单例类可以了解所有会话,并可以暂停正在运行的工作流来交换它们。

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

感谢您的回答 -redoced

1 个答案:

答案 0 :(得分:2)

使用单例WCF服务类几乎从来都不是一个好主意 - 除非你真的只有一个单一(物理)资源要防止并发访问,否则它实际上没有意义。

因为:要么它不具备多线程能力,但在这种情况下,它会成为一个巨大的瓶颈 - 请求是严格按顺序处理的 - 一个接一个。表现不太好。

或者你需要让整个服务具有多线程意识 - 让我告诉你,正确,安全,有效地做到这一点并不适合胆小的人。要做到这一点真的很难,并使其表现良好。

我根本没有看到任何需要。

  • 留下“静态”消息调用(如你所说)是按呼叫服务 - 这些服务易于编程,运行良好,性能良好,不会导致任何多线程问题

  • 需要会话的那些服务调用(希望!) - 将它们放在自己的服务端点上,按会话进行,在会话中使用“SessionId”来识别它们。这比一次调用要多得多 - 但仍然远不如多线程编程那么复杂和容易出错

WCF会话的资源:

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

WCF工作流服务的资源: