我剛開始在ASP.NET AJAX中使用WCF服務。我從Javascript實例化我的WCF服務,然後將字符串變量作爲參數傳遞給我的WCF服務方法(帶有OperationContract簽名)。然後,我返回一個.NET對象(用DataContract定義),它綁定到我的自定義Javascript類。基於登錄到我的Web會話的用戶,我遇到了身份驗證問題。但是,WCF Web服務是一種完全不同的服務,對於HttpContext.Current對象沒有上下文。什麼是最安全的方式來訪問該對象?從WCF Web服務訪問HttpContext.Current
25
A
回答
44
您可以通過啓用AspNetCompatibility可以訪問HttpContext.Current
,最好通過配置:
<configuration>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
</configuration>
這反過來又允許你訪問當前用戶:HttpContext.Current.User
- 這就是你要的,對吧?
你甚至可以通過附加屬性裝飾你的服務類強制AspNetCompatibility:(在System.ServiceModel.Activation
命名空間)
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
如果該屬性是到位,您的服務將無法啓動,除非AspNetCompatibility是啓用!
22
您沒有HttpContext的默認,但你有很多的的OperationContext存在於同一對象(總是存在)或WebOperationContext(這是僅適用於特定的綁定。
您可以訪問的OperationContext或WebOperationContext通過靜態.Current
屬性,像這樣:WebOperationContext.Current
+4
+1這應該是公認的答案。我們正在處理可以託管在Windows服務或自託管的WCF。 AspNetCompatilibity只是一個老習慣。 – Askolein 2014-03-11 10:18:57
2
如果你不想改變的Web.config或你不能改變它:
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. 從javascript訪問WCF服務
- 2. 從PCL訪問WCF服務
- 3. 從Silverlight訪問WCF服務
- 4. 從silverlight訪問WCF服務
- 5. 從HttpContext.Current訪問TempData
- 6. 使用powershell2訪問wcf web服務
- 7. 訪問VB6中的WCF Web服務
- 8. 從WCF Web服務
- 9. 從CQRS訪問Web服務
- 10. 從Web服務訪問FacesContext
- 11. 從GWT訪問Web服務
- 12. 訪問wcf服務
- 13. 訪問Web服務 - 跨域
- 14. 從Windows Web服務訪問Web API
- 15. 訪問Web服務
- 16. WCF Web服務訪問分析服務(SSAS)
- 17. WCF:從多個Web服務併發訪問公共數據庫
- 18. 從IIS託管的WCF Web服務訪問網絡共享
- 19. 從Apache CXF(MTOM + WS-Security)訪問WCF Web服務
- 20. Wcf.js模塊從nodejs訪問wcf服務
- 21. 從Android訪問.NET WCF服務
- 22. 從WCF服務訪問HTTP標頭
- 23. 從ASP.NET 2.0訪問WCF服務
- 24. 從WCF服務中訪問ServiceSecurityContext.Current.PrimaryIdentity.Name
- 25. 我的web服務中的HttpContext.Current爲空
- 26. 從WCF消費Web服務
- 27. 從WCF服務調用asmx Web服務
- 28. 錯誤訪問WCF服務
- 29. WCF Web服務
- 30. 從web服務客戶端訪問java web服務
感謝您的意見。我給了你一點。一旦我測試完了,我會標記我的答案。我們在應用程序中存儲用戶的方式稍有不同,因此我們必須重新設計他們推薦的表單身份驗證。然後我可以使用這種方法。 – MacGyver 2011-05-19 22:05:02
值得注意的是,這隻有在您的服務託管在IIS中時纔有效。 – 2015-11-09 11:56:29