【问题标题】:How does IsInitiating working on a WCF contract?IsInitiating 如何处理 WCF 合同?
【发布时间】:2015-03-11 10:22:11
【问题描述】:

通过阅读this,我认为客户端在执行 IsInitiating=true 服务方法之前无法运行 IsInitiating=false 服务方法。但是在我们的 WCF 服务中是一个单例,我可以随意调用服务方法,不需要先调用 IsInitiating=true 服务方法吗?这到底是如何工作的?

我正在使用 IAuthorizationPolicy Evaluate 我设置这样的临时上下文

evaluationContext.Properties["Principal"] = userContext;

这可能是问题吗?

我现在必须检查 messageAction 而不是使用 IsInitiating,如果它不是登录服务方法,则检查是否存在存储的上下文,否则抛出安全异常。

编辑:

这是服务设置使用的内容:

InstanceContextMode = InstanceContextMode.PerCall
oncurrencyMode = ConcurrencyMode.Multiple
SessionMode = SessionMode.Required

【问题讨论】:

    标签: c# wcf session communication principal


    【解决方案1】:

    IsInitiating 和IsTerminating 用于与InstanceContextMode.PerSession 一起使用,当需要在连续调用中保留服务器上的每个会话状态时,它们会划分界限,从而允许与每个会话关联的服务实例的生命周期是受控。会话模式实例化的好处是状态可以保留在服务器上,而无需例如需要从数据库中重新水化状态,尽管这最终会限制可伸缩性,因为并发会话的数量是有限的(每个新会话创建并持有一个实例直到终止,这会消耗内存)。

    如果单例是指具有InstanceContextMode.Single 实例化的 WCF 服务,那么 WCF 会话(以及 IsInitiating / IsTerminating)将不适用,因为服务器上将为所有客户端的所有调用保留一个状态. InstanceContextMode.Single(假设为ConcurrencyMode = ConcurrencyMode.Multiple)应谨慎使用,因为线程安全将是一个问题,例如单例可用于不可变缓存(例如静态数据服务)或无状态计算。

    This MSDN article here很好地解释了实例化模式、会话和并发之间的关系

    编辑

    为了让 WCF 会话保持 Initiating 和 Terminating calls 之间的状态,您需要将 InstanceContextMode 更改为 InstanceContextMode.PerSession,因为 PerCall 将丢失调用之间的所有状态(实例对象将有资格在每次调用后收集,而使用PerSession,实例将被保留,直到调用IsTerminating 方法)。您还需要采用支持会话的binding。这里有一个基于 MSDN 计算器服务over here 的示例。 InstanceContextMode.PerSession 需要注意的另一件事是,如果您在农场/云环境中横向扩展,则需要服务器关联(粘性会话)。

    【讨论】:

    • 谢谢,很抱歉错过信息,我正在使用 InstanceContextMode : PerCall。所以没有真正的单例,但我确实有所有上下文都使用的静态缓存。
    • 我在 MSDN 文章中找不到有关 IsInitiating 的任何信息。
    • 要让会话的魔力发挥作用,您需要将 InstanceContextMode.PerCall 更改为 PerSession - 这将在会话的整个生命周期内将实例保留在服务器上。
    • 好吧,我明白了,不过我选择了 PerCall,因为据说它更具可扩展性。相反,我在将存储上下文数据的服务上获得了一个缓存,并且每次调用完成时都会获取该缓存。所以我认为这确实是 IsInitiating 在我的解决方案中不起作用的原因。谢谢
    猜你喜欢
    • 2012-12-17
    • 2011-03-11
    • 2011-09-02
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多