2011-06-03 32 views
2

我们有一个基于服务的系统。系统是分层的或分层的,以便来自外部实体的单个服务呼叫可能会触及一个,两个或三个其他服务,具体取决于呼叫类型和系统状态。基于服务的系统中会话(跟踪)ID的设计模式?

我们希望能够做的是追踪跨这些不同服务的给定呼叫的进度。

理想情况下,随着外部呼叫进入,会生成一个跟踪号码,这将跟随我们整个系统的所有后续呼叫。

是否有任何特定的设计模式或WCF功能(模式的实现),我们可以使用它来跟踪此进度?

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

This page may also have some relevance.

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

回答

0

Chris的回复很不错,但我们发现微软的this information非常有用---它内置于IIS/WCF支持。

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

enter image description here

2

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

这将让您创建一个属性,您可以坚持使用您的服务方法(或服务)。那有BeforeAction/AfterAction/OnError。

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

+0

好主意!这符合我们正在使用的一些基础设施。我只是想知道如何通过服务器/服务实例传播它。 – 2011-06-03 13:04:31

+0

根据您配置服务的方式,我相信您可以设置它,以便沿整个方向传递相同的上下文。如果这样做并不能解决你的问题,那么你只需要让当前的服务获取密钥,然后手动将它传递给下一个服务调用。对于入口点服务,您最终可能会有1个行为,对于传递服务,最终会有1个行为。当然,您可以将两者都填入1行为中,并在逻辑上确定是否需要读取密钥或创建密钥。 – 2011-06-03 13:11:19

+0

谢谢!非常感激! – 2011-06-03 13:17:40