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サービス以外のすべてのコンピューターでセッションを取得できるのはなぜですか?
手遅れかもしれませんが、これを試しましたか?
[WebMethod(EnableSession = true)]
public string checkSession()
{
return HttpContext.Current.Session.SessionID
}
SessionIDは、デフォルトでクライアントのブラウザにCookieとして保存されます( セッション状態の概要 )。そのため、問題のあるコンピューターでそのCookieが適切に作成されているかどうかを確認してください。たぶんクッキーが何らかの理由で無効になっていますか?その場合、そのWebサービスにアクセスしているときに、SessionIDをサーバーに送信しません。
アプリケーションが使用しているワーカープロセスの数を確認できますか?IISのアプリプール設定で確認できます。
複数のワーカープロセスが使用されている場合は、Webガーデンを実行していると呼ばれます。その場合、このセッションはワーカープロセス間で共有されないため、procセッションでは役に立ちません。ご覧ください http://www.west-wind.com/weblog/posts/2005/Apr/20/Why-you-shouldnt-use-InProc-Session-State-in-ASPNET
IISでセッションを無効にしましたか?これはルール.netを超えます。
これを見てください http://technet.Microsoft.com/en-us/library/cc732964(v = ws.10).aspx -セッションを無効にする方法を説明していますが、場所を示しています設定を確認します。
ありがとうフラン
デフォルトでは、Webサービスはステートレスです。ただし、セッション情報を使用する必要がある場合は、Webサービスのセッション状態情報にアクセス、使用、または変更するために、必ずマーカーインターフェイスIReadOnlySessionStateおよびIRequiresSessionStateを使用してください。
デフォルトでは、WebサービスはSessionをサポートしません。 Webメソッド属性でパラメータを明示的に指定する必要があります
これらの2つのことは私のために働きます
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
下 <httpModules>
enableSessionState="true"
in <page>
鬼ごっこ