CookieContainerとWebサービス
-
25-09-2019 - |
質問
私はWebサービスがあります:
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());
Webサービスとのインサートから、それはだコンストラクタこのような行をもし削除オープン()メソッドは、罰金を動作します:
_conn.Open(login, password);
_lpu = (MNLpu)_conn.CreateLPU();
どのようにそれを修正するには? 後記MNConnection - 。私自身のクラス、OracleConnectionので動作します。
解決
Webサービス上の任意のプライベート変数を保つために良いではありませんので、ウェブメソッドへのあなたの各呼び出しは、サーバー側で新しいWebサービスを呼び出します。
両方のコールの場合、lh.Openとlh.Getは、サーバー側で、Webサービスの2つの異なるインスタンスは、クライアントでのプロキシの唯一の1つのインスタンスを持っている場合でも、作成されます。
あなたはこれを修正したい場合は、、そしてあなただけの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;
}
所属していません StackOverflow