我在C#中有一个Web服务,并希望有一个嵌套的内部类,它抽象出会话集合,如下所示:
public class Service : System.Web.Services.WebService
{
[WebMethod]
public string Foo(string ticket)
{
SessionPool.getSession(ticket);
}
private class SessionPool
{
public static Session getSession(string ticket)
{
// this is what i want to do, but I can't access Context
return (Session)Context.Session[ticket];
}
}
}
是否可以通过嵌套类访问WebService类的HTTP上下文?如果没有,是否可以存储对它的引用?
答案 0 :(得分:5)
C#中的嵌套类与Java中的(非静态)内部类不同。没有对包含类的实例的隐式引用 - 因此,如果没有显式引用,则不能使用包含类的任何实例成员。
但是,您可以访问包含类的所有私有成员 - 并为实例成员提供合适的引用。
答案 1 :(得分:0)
System.Web.HttpContext.Current
答案 2 :(得分:0)
我可以想到几件事。
首先,您可以尝试使用getContext()而不是仅仅访问Context。如果有效,那就完成了。
如果没有,您可以将Service作为初始化程序传递给SessionPool。在从Foo()调用getSession()之前,通过调用setService()初始化SessionPool,添加一个WebService句柄。
虽然,在那一点上,为什么不直接将Context作为参数传递给getSession()?