WCF Services'ı ASP.NET AJAX ile kullanmaya başladım. WCF hizmetimi Javascript'ten başlatıyorum ve daha sonra dize değişkenlerini WCF Hizmet yöntemime (OperationContract imzasıyla) argüman olarak iletiyorum. Daha sonra özel Javascript sınıfıma bağlı bir .NET nesnesi (DataContract ile tanımlanmış) döndürüyorum. Web oturumuma giriş yapan kullanıcıya dayanarak kimlik doğrulama konusunda sorun yaşıyorum. Ancak, WCF web hizmeti, HttpContext.Current nesnesine bağlamı olmayan tamamen farklı bir hizmettir. Bu nesneye erişmenin en güvenli yolu nedir?erişim HttpContext.Current WCF Web Service'den
cevap
Sen tercihen yapılandırma yoluyla, AspNetCompatibility etkinleştirerek HttpContext.Current
erişebilirsiniz:
<configuration>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
</configuration>
Bu, şu anki kullanıcıya erişmenizi sağlar: HttpContext.Current.User
- hangisi peşindesiniz, değil mi?
Hatta ek bir özellikte ile servis sınıfını dekorasyon tarafından AspNetCompatibility uygulayabilirsiniz: (. System.ServiceModel.Activation
ad olarak)
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
o özellik yerinde olduğundan, servis AspNetCompatibility olmadıkça başlatılamaz etkin!
Bir HttpContext varsayılan olarak yok ama sen (her zaman mevcut olduğu) OperationContext mevcut aynı nesneler veya belirli bağlamaları için geçerlidir WebOperationContext (çok var.
Sen erişebilir şöyle statik .Current
özelliğini kullanarak OperationContext veya WebOperationContext: WebOperationContext.Current
+1 bu kabul cevap olmalıdır. Bir Windows Hizmetinde barındırılabilecek veya kendi kendini barındırabilecek WCF ile uğraşıyoruz. AspNetCompatilibity sadece eski bir alışkanlıktır. – Askolein
Eğer Web.config değiştirmek istemiyorsanız veya bunu değiştiremezsiniz:
private string GetClientIPAddress()
{
var props = OperationContext.Current.IncomingMessageProperties;
var endpointProperty = props[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
if (endpointProperty != null)
{
if (endpointProperty.Address == "::1" || String.IsNullOrEmpty(endpointProperty.Address))
return "127.0.0.1";
return endpointProperty.Address;
}
return String.Empty;
}
- 1. WCF hizmetinde WebHttpBinding uygulamasına erişim oturumu
- 2. HttpContext.Current bir WCF hizmetinde boş olması gerekmez mi?
- 3. HttpContext.Current statik sınıflarda erişildi
- 4. HttpContext.Current kullanmadan bir ASP.NET web uygulamasının fiziksel konumunu nasıl edinilir?
- 5. WCF Erişim Reddedilen istisna hiçbir zaman CheckAccessCore
- 6. WCF tarafından iade edilen istemcide erişim nesnesi
- 7. ASMX'i WCF Web Hizmetine Dönüştürme
- 8. Flash olmadan erişim web kamerası
- 9. HttpContext.Current MVC 4'de Çözümlenmiyor Project
- 10. WCF
- 11. WCF Web API'sinde HttpOperationHandler yerine ASP.NET Web API'sı
- 12. C# WCF Web Api 4 MaxReceivedMessageSize
- 13. WCF hizmetimi web sitemde nasıl barındırabilirim?
- 14. .NET üzerinden WCF üzerinden SAP Web Hizmeti
- 15. WCF Web hizmeti her zaman sıfırlanıyor
- 16. WCF Ayrı Kurulumda WCF Servisi
- 17. WCF/WCF Veri Hizmetleri/WCF RIA Hizmetleri
- 18. Web alanları arası erişim için web hizmeti nasıl kullanılabilir?
- 19. VirtualBox'ta yayınlanan bir web servisine erişim sorunu
- 20. Başka bir web uygulamasının erişim oturumu
- 21. Web taramasında ortak klavye navigasyonu (erişim tuşları)?
- 22. üzerinde çalışıyorum bir WCF hizmeti WCF uygulamasında
- 23. WCF: ServiceHost (WCF 4.5)
- 24. WCF
- 25. WCF
- 26. WCF
- 27. WCF
- 28. WCF + Kullanıcı kimlik bilgileri
- 29. Android uygulaması benim wcf web servisine erişim için ad alanı, sabun eylemi ve url ne olmalıdır? gibi
- 30. "Erişim engellendi"
Giriş için teşekkürler. Sana bir nokta verdim. Bunu test ettiğimde cevabımı işaretleyeceğim. Kullanıcıyı uygulamada biraz farklı bir şekilde saklıyoruz, bu yüzden formların kimlik doğrulaması için önerdiği gibi şeyleri yeniden tasarlamak zorundayız. Sonra bu yaklaşımı kullanabilirim. – MacGyver
Bu, yalnızca hizmetiniz IIS'de barındırılıyorsa çalışacaktır. –