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

WCF设计:同时使用:会话和每次调用机制?,wcf,session,workflow-foundation,Wcf,Session,Workflow Foundation,我将使用WCF设计一个Web服务,它生成不需要会话的方法(如静态调用,例如:返回有关Web服务本身的一些信息)和其他需要会话的方法 此外,基于会话的方法使用的工作流应该能够在运行时更改 我当前的设计如下所示: IIS中有一个运行的单例服务,它处理所有每次调用的方法,该方法还充当基于会话的服务的主机。这样,singleton类就可以知道所有会话,并可以停止正在运行的工作流来交换它们 这是一个好的/可能的设计选择吗? 这是使用通用设计的通用场景吗? 如果有任何阅读提示,我都会很高兴,因为msdn帮助

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

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

我当前的设计如下所示:

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

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

感谢您的回答

-redoced

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

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

或者你需要让整个服务多线程化——让我告诉你,正确、安全、高效地实现这一点并不适合胆小的人。要做到这一点,并让它表现出色,真的很难

我真的看不出有什么必要这样做

  • 给您留下“静态”消息调用(正如您所说)是每次调用的服务-这些服务易于编程,工作良好,执行良好,从不引起任何多线程问题

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

WCF会议的资源:

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

WCF工作流服务的资源:


我可能还不太了解工作流,但我不知道如何才能停止会话中正在运行的工作流并交换这些工作流,这正是困扰我的地方(感谢链接,我将阅读它们)@redoced:你需要看看WCF工作流服务-添加了更多链接。在.NET 4中,此区域将显著改善,再次感谢您的链接。我想我现在有了更深入的了解,并决定根本不使用会话(或持久服务),因为会话中需要保留的数据小到足以在响应/新呼叫中传输。工作流服务的链接非常整洁,我们将进一步研究