我有WebService:
public class Service1:WebService {
private readonly MNConnection _conn;
private MNLpu _lpu;
public Service1() {
_conn = new MNConnection();
}
[WebMethod(EnableSession = true)]
public void Open(string login, string password) {
_conn.Open(login, password);
_lpu = (MNLpu)_conn.CreateLPU();
}
[WebMethod(EnableSession = true)]
public decimal Get() {
return _lpu.Count;
}
}当我从外部控制台应用程序调用它时,它在最后一行显示NullReferenceException:
CookieContainer cookie = new CookieContainer();
Service1 lh = new Service1 {CookieContainer = cookie};
lh.Open("login", "pwd");
Console.WriteLine(lh.Get());如果从webservice中移除Open()方法,并将其插入到构造函数中,则可以很好地工作:
_conn.Open(login, password);
_lpu = (MNLpu)_conn.CreateLPU();如何修复它?P.S. MNConnection -我自己的类,与OracleConnection一起工作。
发布于 2010-09-27 18:22:41
对web方法的每个调用都会在服务器端调用一个新的web服务,因此在Web服务上保留任何私有变量是不好的。
对于服务器端的lh.Open和lh.Get这两个调用,即使在客户端只有一个代理实例,也会创建两个不同的WebService实例。
如果你想纠正这一点,那么你应该只使用HttpContext.Current.Session,并将你有用的对象实例存储在下面的代码中。
您应该更改您的web服务,如下所示...
[WebMethod(EnableSession = true)]
public void Open(string login, string password) {
MNConnection _conn = new MNConnection();
_conn.Open(login, password);
HttpContext.Current.Session["MyConn"] = _conn;
HttpContext.Current.Session["LPU"] = _conn.CreateLPU();
}
[WebMethod(EnableSession = true)]
public decimal Get() {
MNLPU _lpu = HttpContext.Current.Session["LPU"] as MNLPU;
return _lpu.Count;
} https://stackoverflow.com/questions/3802830
复制相似问题