web-dev-qa-db-ja.com

.NET ASMXWebサービスでセッションを取得する

ASP.NETWebアプリと一緒にASMXWebサービスをホストしています。次に、ユーザーセッションをWebサービスに取り込む必要があります。これをテストするために、私はこの簡単な方法を作りました:

    [WebMethod(EnableSession = true)]
    public string checkSession()
    {
        return HttpContext.Current.Session["userid"].ToString();
    }

したがって、最初にWebアプリにログインし、次にブラウザーでWebサービスに移動して、自動生成されたテストページで[checkSession]をクリックします。私はこれを3台のコンピューターでテストしました。これらの3つはすべてwebappで正常に動作し(セッションが作成されているなど)、2つはwebmethodを呼び出すとSession ["userid"]の値を返しますが、最後のコンピューターは「オブジェクト参照がセッションがnullであるため、「オブジェクトのインスタンス」。

では、これらのコンピューターの違いと、ASP.NETアプリがWebサービス以外のすべてのコンピューターでセッションを取得できるのはなぜですか?

20
Matt

手遅れかもしれませんが、これを試しましたか?

[WebMethod(EnableSession = true)]
public string checkSession()
{
    return HttpContext.Current.Session.SessionID
}
9
Pietro Allievi

SessionIDは、デフォルトでクライアントのブラウザにCookieとして保存されます( セッション状態の概要 )。そのため、問題のあるコンピューターでそのCookieが適切に作成されているかどうかを確認してください。たぶんクッキーが何らかの理由で無効になっていますか?その場合、そのWebサービスにアクセスしているときに、SessionIDをサーバーに送信しません。

3
kukabuka

アプリケーションが使用しているワーカープロセスの数を確認できますか?IISのアプリプール設定で確認できます。

複数のワーカープロセスが使用されている場合は、Webガーデンを実行していると呼ばれます。その場合、このセッションはワーカープロセス間で共有されないため、procセッションでは役に立ちません。ご覧ください http://www.west-wind.com/weblog/posts/2005/Apr/20/Why-you-shouldnt-use-InProc-Session-State-in-ASPNET

2
dicemaster

IISでセッションを無効にしましたか?これはルール.netを超えます。

これを見てください http://technet.Microsoft.com/en-us/library/cc732964(v = ws.10).aspx -セッションを無効にする方法を説明していますが、場所を示しています設定を確認します。

ありがとうフラン

1
Fran Hoey

デフォルトでは、Webサービスはステートレスです。ただし、セッション情報を使用する必要がある場合は、Webサービスのセッション状態情報にアクセス、使用、または変更するために、必ずマーカーインターフェイスIReadOnlySessionStateおよびIRequiresSessionStateを使用してください。

0
DRobertE

デフォルトでは、WebサービスはSessionをサポートしません。 Webメソッド属性でパラメータを明示的に指定する必要があります

これらの2つのことは私のために働きます

  1. <add name="Session" type="System.Web.SessionState.SessionStateModule"/><httpModules>

  2. enableSessionState="true" in <page> 鬼ごっこ

0
panky sharma