【问题标题】:Regarding WCF InstanceContextMode关于 WCF InstanceContextMode
【发布时间】:2013-01-03 10:19:49
【问题描述】:

我是 WCF 的新手。经常凝视 wcf 代码和文章。在查看了许多代码之后,我经常坚持非常基本的事情,并且没有对以下问题进行详细讨论。所以这是我的几个基本问​​题....并寻找示例情况和示例代码的详细讨论。

什么是InstanceContextMode? 许多人使用 InstanceContextMode Single 或 PerCall 或 PerSession ?

当我应该选择 InstanceContextMode Single 或 PerCall 或 PerSession 时,我只需要深入了解?它基本上是做什么的??

当我打开 Single 时简要告诉我会发生什么,或者在 PerCall 或 PerSession 的情况下会发生什么? Single 或 PerCall 或 PerSession 有什么区别

什么是默认的 InstanceContextMode ?

【问题讨论】:

    标签: wcf


    【解决方案1】:

    InstanceContextMode 属性指示 WCF 将如何创建您的服务类的实例以及这些实例是否将在请求之间重用。

    • PerSession:(默认)将为每个 WCF 会话创建一个服务实例,用于支持会话的通道(否则,行为与 PerCall 相同);如果您在服务类中为每个客户端会话维护状态,则此值很有用
    • PerCall:将为来自客户端的每个 WCF 操作(方法调用)创建一个新的服务类实例
    • Single:在宿主进程中只会创建一个服务实例,它会为所有传入的请求提供服务;除非服务的 ConcurrencyMode 行为设置为 Multiple,否则所有调用都将序列化到服务。

    对于大容量的无状态服务,使用SingleConcurrencyMode.Multiple 可以减少分配的服务实例数量和垃圾收集器的相关压力。不过,WCF 并不要求/假定您的服务是无状态的,这就是为什么 PerSession 是默认值。

    您可以通过在服务的默认构造函数中设置断点来验证不同实例上下文模式的行为。

    【讨论】:

    • 感谢您的回答。我不擅长 wcf,只是学习它。所以请指导我如何调试 wcf 服务以更好地了解 InstanceContexMode。你能写出简单的代码吗?我可以逐步调试并理解 InstanceContexMode 调试的行为。谢谢
    • 我有一个 WCF 扩展库,其中包含大量示例 here。如果您下拉代码,有一个进程内示例应该允许您在 WCF 服务中设置断点。该示例位于 Samples/InProc/ConsoleEcho/Client 下。该服务位于 MockOutput.cs 中,您应该能够在其中添加 ServiceBehavior 属性并在其中设置断点。
    • InProc 你想说什么??
    • 进程内的简称。这意味着在与客户端应用程序相同的进程中托管 WCF 服务。
    • 正确,但不止于此。进程内传输比简单地通过另一个传输(例如 TCP)自承载 WCF 服务更有效,因为没有编码或消息序列化开销。
    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    相关资源
    最近更新 更多