2010-12-28 24 views
5

Lütfen yardım edin.REST WCF servisi ve ASP.NET'teki oturumlar

Bir WCF REST hizmetinin içinden bir asp.net uygulamasının geçerli oturum nesnesine erişmeye çalışıyorum.

Hiç başarı olmamıştır. Hizmetten erişilen oturum nesnesi, aspx sayfalarında aynı değildir.

Yani, burada sorum şu: mümkün mü HttpContext.Current.Session aracılığıyla DİNLENME WCF hizmetinde geçerli oturumuna erişmek için? web.config'de

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

:

kod aşağıdaki noktaları vardır amacıyla

<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> 

Teşekkür ederim,

+1

WCF ans ASP.NET birbirinden tamamen farklı iki teknolojileridir. Lütfen sorunuza açıklık getirin. Başarmaya çalıştığınız şey net değil. ASP.NET oturumları, (ASP.NET web?) Uygulamanızda barındırabileceğiniz herhangi bir WCF servis oturumundan bağımsızdır. – Jan

+0

Örnek uygulamayı http://blogs.msdn.com/b/wenlong/archive/2010/02/21/using-asp-net-sessions-from-wcf.aspx adresinden indirmeyi deneyin ve neleri kaçırdığınızı anlamaya çalışın . – decyclone

+0

Servisi, uygulamanızdan veya tarayıcıdan mı çağıyorsunuz? Aktarılan çerezleri kontrol etmeye çalıştınız mı? ASP.NET'teki oturum çerez tarafından tanımlanır. Çerez servis talebi ile aktarılmazsa yeni oturum oluşturulur. Btw. REST hizmetleri vatansız olmalı = herhangi bir seans olmaksızın. –

cevap

4

bir oturum rehidrated edilecek bulunabilmesi için, sağlamanız gerekmektedir anahtar. Anahtarın kullanıcı tarafından çerez veya url parametresi aracılığıyla sağlandığı normal bir asp.net uygulamasında.

Bu anahtarı REST istemcisinden nasıl almayı planlıyorsunuz? Bu müşteriler ilk önce kimlik doğrulamadan sonra bu anahtarı nasıl alır? Anahtarı nerede saklıyorlar?

Bu nedenle, REST tabanlı hizmetlerin çoğunun bir api erişim anahtarı ve ayrıca her isteği imzalamak için başka bir anahtar almasıdır. REST tabanlı tasarımlarda IMHO oturumları önemsizdir.

+0

Bu gönderinin duygularına katılıyorum. OP'nin mimarisine başka bir eleman eklemesi gerektiğini düşünüyorum. – jcolebrand

+0

@ user6130: Bu cevap için teşekkür ederiz.Sadece benim için bir soru olarak: (5 dakikalık sürgülü bir son kullanma süresiyle oturum açma saatinde ayarladığım) bir çerezde userid eklemek istiyorum ve bu isteği kullanmak için kullanıyorum. talep etmeye çalışıyor. Bu iyi uygulama olarak kabul edilir mi? Teşekkürler! :) – Flo

1

Bu soru uzun zaman önce istendi biliyorum ama bu servis sınıfının üstünde ardından bir asp.net uygulaması içinde WCF dinlendirici barındırma hizmeti ve elde edilebilir aşağıdaki öznitelik ekleyin:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
dahil

Bu sağlayan pek çok şey:

HttpContext: WCF Güncel erişebilir ASP.NET Uyumluluk Modu çalışan servisler ve ilişkili devlet.

fazla bilgi için buraya bakınız: What does AspNetCompatibilityRequirements really mean?

İlgili konular