WCF 请求范围变量
WCF Request Scope Variables
我一直在做一些工作来扩展我的服务的 WCF 管道,主要使用 IOperationInvoker
来实现我自己的功能。
我目前正在使用 System.Web.HttpContext.Current.Items
来存储一些我希望在请求的整个生命周期内保持和可用的变量(方法调用前、webserice 方法期间、post 方法调用) .
这在使用 HTTP
绑定时工作正常,但是,我现在需要启用 TCP
和 NamedPipes
绑定,其中 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.
我一直在做一些工作来扩展我的服务的 WCF 管道,主要使用 IOperationInvoker
来实现我自己的功能。
我目前正在使用 System.Web.HttpContext.Current.Items
来存储一些我希望在请求的整个生命周期内保持和可用的变量(方法调用前、webserice 方法期间、post 方法调用) .
这在使用 HTTP
绑定时工作正常,但是,我现在需要启用 TCP
和 NamedPipes
绑定,其中 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.