1

次のメソッドを持つ ASMX Web サービスがあります。

[WebMethod(Description = "Test", EnableSession = true)]
public string DoWork(string param)
{
   string user = Session["user"].ToString();
}

AJAX を使用してクライアント側からこのメソッドを呼び出すと、SessionId は同じまま (aspx ページと Web サービスの場合) ですが、サーバー側のコード (ボタン クリック イベント) からこのメソッドを呼び出すと、SessionId が変更されます。

ServiceReference1.MyServiceSoapClient obj = new ServiceReference1.MyServiceSoapClient();
string user=Session["user"];
obj.DoWork("Test string"); 

SESSIONID が変更されるのはなぜですか? 両方を同じに保つ方法は?

4

1 に答える 1

2

それぞれの場合にどこから電話をかけているか考えたことはありますか? サーバー側の呼び出しでは、サーバーからそれ自体に呼び出しているため、これにより新しいセッションが作成されますが、それ以外の場合は同じクライアント エンドを使用しているため、セッションは変更されません。

これをもう少し明確に描写する必要がある場合は、Web サービスの観点からこれを見てください。クライアントが Web ブラウザである場合もあれば、それ自体がクライアントである場合もあります。これは異なるため、SessionID を変更する必要があります。


サーバーがそれ自体にクエリを実行する正当な理由があると仮定すると、渡すことができるパラメーターを Web サービスに追加して、一部のデータを共有できるようにすることを検討します。セッション。


Web サービスと aspx ページが同じサーバー上にある場合、Web サービスがアクセスする機能はすべて、Web ページのコード ビハインドで直接アクセスできます。Web サービスの「DoWork」メソッドのロジックを、Web ページと Web サービスの両方がアクセスできる DLL に入れることができます。これにより、同じクライアントがサーバー上で処理されているため、SessionID を変更できなくなります。リクエスト。

于 2013-07-04T20:48:31.460 に答える