【问题标题】:Design patterns for session (tracking) IDs in service-based systems?基于服务的系统中会话(跟踪)ID 的设计模式?
【发布时间】:2023-03-16 07:53:01
【问题描述】:

我们有一个基于服务的系统。该系统是分层或分层的,因此来自外部实体的单个服务调用可能会触发一个、两个或三个其他服务,具体取决于调用类型和系统状态。

我们希望能够跨这些不同的服务跟踪给定调用的进度。

理想情况下,当外部呼叫进来时,会生成一个跟踪号,这会跟随我们系统中的所有后续呼叫。

是否有任何特定的设计模式或 WCF 功能(模式的实现)可以用来跟踪这一进度?

This page gives an example of using session IDs,但目前还不清楚一旦涉及到多个服务,正确的做法是什么。

This page may also have some relevance.

我们对 C# / WCF 实现特别感兴趣,但对任何相关资源的引用都很有趣(Java / PHP / 其他)。

【问题讨论】:

    标签: c# wcf design-patterns c#-4.0


    【解决方案1】:

    我会使用面向方面的编程来处理这个问题。我相信正确的部分是服务行为。

    这将让您创建一个属性,您可以将其粘贴在您的服务方法(或服务)上。有 BeforeAction/AfterAction/OnError。

    对于入口点服务,我将让操作创建您的个人 sessionid,将其填充到 WCF 上下文中,然后使用 Before、After 和 Error 方法将数据发布到您的数据存储中,或者按照您的计划确定进度。

    【讨论】:

    • 好主意!这适合我们正在使用的一些基础设施。我只是想知道如何在服务器/服务实例之间传播它。
    • 根据您配置服务的方式,我相信您可以将其设置为在整个过程中传递相同的上下文。如果这不适合您的情况,您只想让当前服务获取密钥,然后手动将其传递给下一个服务调用。您可能最终会得到 1 个入口点服务的行为,以及 1 个传递服务的行为。当然,您可以同时填充 1 个行为,并从逻辑上确定您是需要读取密钥还是创建密钥。
    【解决方案2】:

    Chris 的回复很好,但我们发现来自 Microsoft 的 this information 非常非常有用 --- 它内置于 IIS / WCF 支持中。

    启用下面屏幕截图中指示的日志确实很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2015-05-20
      • 2011-12-04
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多