2012-03-30 21 views
1

私は主な技術としてSpring.NetとWCF経由でサーバーと通信している薄いWPFプレゼンテーションクライアントを使用してサーバーとしてIISを持つ(シン)クライアントサーバーアプリケーションを構築していますクライアントのWebバージョン) 私がログインするときに、HTTPセッションCookieを作成してWebブラウザのようなステートフルセッションを作成し、サーバーからライセンスを取得します。 私はログアウトまたはIISのセッションがタイムアウト(クライアントがクラッシュしたりするので、ユーザが正常にログアウトしなかった)場合、私はする必要がある場合:IIS、Spring.Net WCF Httpセッション管理

  • リリースライセンス
  • 自由すべてのセッションがサーバーRAMからオブジェクトをスコープ。

だから私はこの二つのものを実装する必要があります。タイムアウトを処理するためにENDSESSIONイベントに

  • フックをして
  • 解放後にIISへのセッションの終了を伝えるログオフ手順をクラッシュライセンス。

私はオンラインで見ましたが、この2通りのセッション管理を行う方法に関する明確な例は見つかりませんでした。あなたは私を助け、IISのためのいくつかのXML構成例を提供することができれば、Spring.Netが大幅

をいただければ幸いFYIこれは私のweb.configファイルに存在する主なWCFとWEB設定されている:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

    <bindings> 
    <basicHttpBinding> 
     <binding name="basicHttpBinding1" maxReceivedMessageSize="31457280" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"> 
     <readerQuotas maxStringContentLength="31457280" maxArrayLength="31457280" /> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 

    <services> 
    <service name="wcfService" behaviorConfiguration="DefaultBehavior"> 
     <endpoint address="" binding="basicHttpBinding" contract="Nemsys.SMF.Service.Tunnel.IWCFService" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
    </services> 

    <behaviors> 
    <serviceBehaviors> 
     <behavior name="DefaultBehavior"> 
     <serviceMetadata httpGetEnabled="True" /> 
     <serviceDebug includeExceptionDetailInFaults="True" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 

    <sessionState timeout="60" /> 

    <!-- needed by Spring.Net on IIS 7.0 --> 
    <httpHandlers> 
    <add verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web" /> 
    </httpHandlers> 
    <httpModules> 
    <add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web" /> 
    </httpModules> 
</system.web> 

<!-- needed by Spring.Net on IIS 7.0 --> 
<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules> 
    <add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web" /> 
    </modules> 
    <handlers> 
    <add name="SpringPageHandler" verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web" /> 
    <add name="SpringContextMonitor" verb="*" path="ContextMonitor.ashx" type="Spring.Web.Support.ContextMonitor, Spring.Web" /> 
    </handlers> 
</system.webServer> 

実際に私は、ユーザーセッションを管理し、オブジェクトを廃棄する前に呼び出されるBLLクラスにIDisposableを実装することによって、ログアウトまたはHttpセッションの期限切れのリソースを正しく解放することができました。 私が行う方法がわからない唯一のことは次のとおりです。 ライセンスを解放した後にユーザーがログアウトボタンをクリックすると、IISセッションを破棄して、割り当てられたすべてのセッションリソースを収集して解放する必要があります。

+1

Imhoこれは、spring.netに関連していません。 IIS上でasp.netセッションを使用している場合、global.asaxを作成し、 'protected void Session_End(Object sender、EventArgs e)'を使用してクリーンアップすることができます。 – Andreas

+1

あなたのアップデートによると 'SessionState.Abandon();'はあなたの友人です。 http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon.aspx – Andreas

答えて

1

これは私がそれをやった方法です:アンドレアスにより示唆されるように が、私はこの

public void Logout() 
    { 
     HttpContext.Current.Session.Abandon(); 
    } 

呼び出す私のセッションの使用例ログアウト方法でIISのイベントをリッスンするように設定春持つことは、そのセッション終了イベントをトリガすべてのセッションスコープオブジェクトがガベージコレクトされることをSpringに伝えます。 ユーザーセッションを管理するユースケースでもIDisposableインターフェイスが実装され、オブジェクトを解放する前にDispose()メソッドが呼び出されます。 この方法では、ライセンスを解放するように求めるライセンスケース(シングルトン)に問い合わせます。

+0

これは私のデバッグ環境で動作しますが、実稼動環境で試してみると、Dispose()メソッドは呼び出されません –