Próbuję zaimplementować model sesji na żądanie w mojej aplikacji WCF i przeczytałem niezliczone dokumenty na ten temat, ale wygląda na to, że nie ma pełna demonstracja tego. I rzeczywiście natknąłem się kilka bardzo przydatnych artykułów takich jak ten:Implementacja sesji na żądanie dla WCF, NHibernate i Ninject
NHibernate's ISession, scoped for a single WCF-call
ale to wszystko z dawnych czasów, kiedy NHibernate i Ninject nie mają WCF konkretne realizacje, dlatego osiąga to, czego potrzebuję, wdrażając ich niestandardowych dostawców usług, itp. Ponieważ teraz zarówno Ninject, jak i NHibernate mają wsparcie WCF, chcę zachować spójność przy użyciu ich modułów, ale skończyłem tutaj ...
Podstawowa konfiguracja i przepływ powinien wyglądać następująco:
- Set CurrentSessionContext do WcfOperationSessionContext w NHibernate konfiguracji
- Na początku służby, zaczynają wniosek, lub w dowolnym miejscu na czas init otwarta sesja i powiązać go z obecnym kontekście
- Repozytoria uzyskać bieżące wystąpienie sesji korzystając SessionFactory.GetCurrentSession() metoda
- Unbind i blisko sesja na koniec cyklu
Moja początkowa problemem było to, że nie był w stanie uzyskać dostęp do cyklu wCF obsłużyć moje wiązania. Po kilkukrotnym wykopaniu kodu, udało mi się podłączyć moje metody do zdarzeń otwierania/zamykania ServiceHost bez zmiany wielu, ale wtedy nie byłem w stanie uzyskać dostępu do OperationContext, ponieważ jest to wątek statyczny.
Później próbowałem włączyć kompatybilność asp.net i używając Application_BeginRequest i Application_EndRequest i wyglądało to bardzo obiecująco, ale nie sądzę, że jest to najlepsze rozwiązanie, ponieważ powinienem wiązać rzeczy do instancji usługi, a nie żądania http .
Czy ktoś kiedykolwiek osiągnął to za pomocą wbudowanych bibliotek rozszerzonych wcf? Albo jakieś pomysły na temat tego, co robię źle?
Miałeś rację, dziękuję. Czytałam o IDispatchMessageInspector i znalazłem ten realizacji: https://igloocoder.net:8443/svn/IglooCommons/trunk/src/IglooCoder.Commons/WcfNhibernate/ z niewielkimi szczypie, byłem w stanie to zrobić praca. – salimaabey
Link jest, niestety, uszkodzony. :( – Cornelius