0

したがって、同じマシンにasp.netアプリとwcfサービスがあります。そして、それらの間でasp.netセッションを共有しようとしています。セッション データを保存するように SQL サーバーを構成しました。ASPState Db と tempdb に 2 つのテーブルがあります。ASPStateTempSessions, ASPStateTempApplications どちらにもデータを含む行があります。私が追加したasp.netアプリとwcfサービス構成で:

<sessionState mode="SQLServer" sqlConnectionString="Data Source=localhost;integrated security=True;Application Name=app" />

Asp.netアプリでは、このようにユーザーを設定しました

HttpContext.Current.Session["User"] = userName;

ログで、ユーザーが実際に設定されたというエントリを見ました。(そしてJS経由でチェック)

wcf サービス:

[ServiceContract(SessionMode = SessionMode.Allowed)]
    public interface IDbWebService
    {
        [OperationContract]
        [WebInvoke]
        Data GetBlahBlah(string env);
}

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public partial class WebService : IDbWebService
    {
          public  Data GetBlahBlah(string env)
          {
                 //trying to get data here, nothing, just null
                _log.InfoFormat("USER: {0}", HttpContext.Current.Session["User"]); 

          }
}

しかし、Session["User"] を取得できません。

私が間違っていることは、おそらく何か明らかなことを見逃していますか?

前もって感謝します!

4

1 に答える 1

0

この投稿を参照してください。

ASP.NET/SQL Server でのセッション状態の喪失

アプリケーション ID が IIS マネージャーで同じであること、および両方の構成で同じマシン キーが設定されていることを確認してください。どちらもセッション状態の生成と暗号化に使用されるため、異なる場合はセッション エントリを共有できません。

別の注意として、アプリケーションと Web サービスの間で情報を渡すためにセッション状態に依存することは、階層化された責任パターンに違反しているように見えます。Web サービスは、サービス契約のどこにも表されていないこのバックドア手段を介してデータを提供するクライアントに依存しています。サービスを使用する別のクライアントは、サービスが正しく機能するために、同じ方法でデータを提供する必要があります。メソッド署名でデータを提供できない理由はありますか?

于 2013-06-13T20:12:09.890 に答える