私はWCFアプリケーションで要求ごとのセッションモデルを実装しようとしていますが、このトピックについては無数のドキュメントを読みましたが、これの完全なデモンストレーション。したがって、彼らは私が彼らを実装することにより、必要なものを達成し、WCF、NHibernate、およびNinjectのためのセッションごとの要求の実装
NHibernate's ISession, scoped for a single WCF-call
が、NHibernateはとNinjectは、WCF固有の実装を持っていなかったときに、これらはすべて昔からある:私は実際に、このようなこの1のようないくつかの非常に有用な物品に出くわしましたカスタムサービスプロバイダなどNinjectとNHibernateの両方でWCFサポートが提供されているので、モジュールを使用して一貫性を維持したいと思いますが、ここで終わりです。
基本設定とフローは次のようになります。
- 設定NHibernateの構成でWcfOperationSessionContextにCurrentSessionContext
- サービス開始で、要求を開始し、またはどこかのinit頃、オープンセッションと
- リポジトリはSessionFactory.GetCurrentSessionを(使用して、現在のセッションのインスタンスを取得し、現在のコンテキストにバインド)方法
- バインド解除と密接なセッションライフサイクル
の終わりに私の最初の問題は、私は私のバインディングを処理するために、WCFのライフサイクルにアクセスすることができないということでした。ちょっとしたコードを掘り下げた後、私はServiceHostのOpening/Closingイベントに変更を加えることなくメソッドをフックすることができましたが、それはスレッド静的なのでOperationContextにアクセスできませんでした。
その後、私はasp.net互換性を有効にしてApplication_BeginRequestとApplication_EndRequestを使用してみましたが、非常に有望でしたが、httpリクエストではなくサービスインスタンスにバインドする必要があるため、 。
ninjectの組み込みwcf拡張ライブラリを使用してこれまでに達成したことはありますか?私が間違っているかもしれないことについてのアイデアは?
ありがとうございました。私はIDispatchMessageInspectorについて読んでいたと私はこの実装が見つかりました:いくつかのマイナーな改良で https://igloocoder.net:8443/svn/IglooCommons/trunk/src/IglooCoder.Commons/WcfNhibernate/ を、私はそれを作ることができました作業。 – salimaabey
リンクは、今は残念ながら壊れています。 :( – Cornelius