質問

私は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; 
    } 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top