WCF 请求范围变量

WCF Request Scope Variables

我一直在做一些工作来扩展我的服务的 WCF 管道,主要使用 IOperationInvoker 来实现我自己的功能。

我目前正在使用 System.Web.HttpContext.Current.Items 来存储一些我希望在请求的整个生命周期内保持和可用的变量(方法调用前、webserice 方法期间、post 方法调用) .

这在使用 HTTP 绑定时工作正常,但是,我现在需要启用 TCPNamedPipes 绑定,其中 System.Web.HttpContext.Current.Items 包显然不可用.

有没有更好的地方来存储我只想在当前请求范围内的变量?

谢谢 大卫

您可以将您的服务设置为持久化的实例上下文模式。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
public class MyService : IMyService
{
    private string sessionVar;         // for each session
}

然后由客户端保持会话活动。 在您的客户端中,您可以在 class 级别创建一个代理,并且只有在您使用完它时才关闭它,这样您就可以使用 sessionVar。

我认为您需要链接到 OperationContext 而不是 HttpContext。类似问题的答案已经给出 here.

基本上您只需要实现 IExtension 并将其插入 WCF。可以找到分步示例,例如 here.