2010-12-28 18 views
5

Proszę, jeśli możesz, pomóż.Usługa REST WCF i sesja w ASP.NET

Próbowałem uzyskać dostęp do bieżącego obiektu sesji aplikacji asp.net z usługi REST WCF.

Nie osiągnięto żadnego sukcesu. obiekt sesji, do którego dostęp uzyskuje się z usługi, nie jest taki sam na stronach aspx.

Oto moje pytanie: czy można uzyskać dostęp do bieżącej sesji w usłudze WCF REST poprzez HttpContext.Current.Session?

Kod zawiera następujące punkty:

[AspNetCompatibilityRequirements 
(RequirementsMode = 
AspNetCompatibilityRequirementsMode.Allowed)] // I have also tried Required 
public class DataService : IDataService 

w web.config:

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
    <behavior name="ClosedRoom.DataServiceBehavior"> 
    <enableWebScript /> 
    </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" > 
    <baseAddressPrefixFilters> 
     <add prefix="http://localhost:63399"/> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 

    <services> 
    <service name="ClosedRoom.DataService"> 
     <endpoint address="" behaviorConfiguration="ClosedRoom.DataServiceBehavior" 
     binding="webHttpBinding" contract="ClosedRoom.IDataService" /> 
    </service> 
    </services> 
</system.serviceModel> 

Dziękuję

+1

WCF ans ASP.NET są dwie zupełnie różne technologie. Proszę wyjaśnić swoje pytanie. Nie jest jasne, co próbujesz osiągnąć. Sesje ASP.NET są niezależne od dowolnej sesji usługi WCF, którą można hostować w aplikacji (ASP.NET web?). – Jan

+0

Spróbuj pobrać przykładową aplikację z http://blogs.msdn.com/b/wenlong/archive/2010/02/21/using-asp-net-sessions-from-wcf.aspx i spróbuj dowiedzieć się, czego Ci brakuje . – decyclone

+0

Czy dzwonisz do tej usługi ze swojej aplikacji lub przeglądarki? Czy próbowałeś sprawdzić przeniesione pliki cookie? Sesja w ASP.NET jest identyfikowana przez cookie. Jeśli plik cookie nie zostanie przesłany z prośbą o usługę, tworzona jest nowa sesja. Btw. Usługi REST powinny być bezstanowe = bez sesji. –

Odpowiedz

4

Aby sesja być rehidrated, trzeba dostarczyć klucz. W normalnej aplikacji asp.net klucz ten jest dostarczany przez użytkownika za pośrednictwem parametru cookie lub adresu URL.

Jak zamierzasz zdobyć ten klucz od klienta REST? W jaki sposób klienci otrzymują klucz początkowo po uwierzytelnieniu? Gdzie przechowują klucz?

Dlatego większość usług opartych na REST ma klucz dostępu API, a także inny klucz do podpisania każdego żądania.

Sesje IMHO są nieistotne w projektach opartych na REST.

+0

Zgadzam się z sentymentem tego posta. Uważam, że PO musi dodać kolejny element do swojej architektury. – jcolebrand

+0

@ user6130: Dziękuję za tę odpowiedź.Tak samo jak dla mnie pytanie: chcę dodać identyfikator użytkownika w pliku cookie (który ustawiam w czasie logowania z wygaśnięciem po wygaśnięciu 5 minut) i użyć go do podpisania mojego żądania i sprawdzenia strony serwera, jeśli ten identyfikator użytkownika ma dostęp do danych próbuje poprosić. Czy uznano by to za dobrą praktykę? Dzięki! :) – Flo

1

Wiem, że to pytanie było zadawane bardzo dawno temu, ale może to być osiągnięte przez gospodarzem spokojny usług wcf w aplikacji ASP.NET i następnie na szczycie swojej klasy usług dodać następujący atrybut:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 

umożliwia to wiele rzeczy, w tym:

HttpContext: usługi WCF działa w trybie zgodności ASP.NET mogą uzyskać dostęp do bieżących i związany jego stan.

Zobacz tutaj, aby uzyskać więcej informacji: What does AspNetCompatibilityRequirements really mean?