我正在创建一个WFC Restful服务,需要保留一个每个用户都会保留的变量,有没有办法实现这一点而不必将变量传递给我的所有调用?
我正在尝试在整个过程中记录用户的过程,天气他们的请求失败或成功,IP地址,他们请求操作,失败时间等。 请注意我是WCF的新手,提前谢谢。
答案 0 :(得分:0)
我最近在研究这个问题(除了它不是RESTFUL)。您可以通过HTTP标头传输信息,并在服务端提取该信息。见http://trycatch.me/adding-custom-message-headers-to-a-wcf-service-using-inspectors-behaviors/
答案 1 :(得分:0)
对于客户端ID本身,我可以建议两个地方放置它。一个是OperationContext.Current.IncomingMessageProperties
。另一个是CorrelationManager.StartLogicalOperation
,它允许您定义逻辑操作 - 可以是服务请求,从头到尾 - 或多个操作 - 并为每个操作检索唯一ID。
我倾向于后者,因为它是System.Diagnostics
的一部分,可以防止对System.ServiceModel
的依赖。 (名称CorrelationManager
甚至描述了您尝试做的事情。)
在任何一种情况下,我都会看拦截。这是读取值(无论您将其存储在何处)的理想方式,而无需使用日志记录和客户端ID知识污染各个方法。 (我从您的消息中看到您正试图避免直接依赖客户端ID。)
这里有一些documentation将Windsor添加到您的WCF服务。 (在某些时候,我会在我的博客上添加一些端到端文档。)然后,当您使用Windsor实例化您的服务时,您还可以使用它来实例化依赖项并放置{{ 3}}围绕它们将在这些依赖项之前或之后执行日志记录。在这些拦截器中,您可以访问或修改该堆逻辑操作。
我没有通过抛出一些链接来做温莎的正义。我想通过一些博客文章来充实它。但我建议调查一下。这有很多原因 - 拦截只有一个。它有助于我们构建服务和依赖关系的方式。
更新 - 我添加了interceptors - 如何在五分钟内将Windsor添加到WCF服务。