我使用WCF自定義驗證與HTTPS(.NET 4.5)。成功驗證返回客戶對象,我想稍後使用。目前,我可以用靜態變量來做到這一點,如果可能的話,我願意避免這些變量。我試圖使用在主線程中變爲null的HttpContext。我的理解驗證在不同線程下運行。有沒有什麼辦法可以分享會話信息,而不涉及數據庫或文件共享。請參閱相關主題here和here。UserNamePasswordValidator和會話管理
在Authentication.cs
public class CustomValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
//If User Valid then set Customer object
}
}
在Service.cs
public class Service
{
public string SaveData(string XML)
{
//Need Customer object here. Without it cannot save XML.
//HttpContext null here.
}
}
感謝您的回覆。我已經嘗試過這個解決方案。當您從驗證轉到保存數據方法時,HttpContext超出範圍。 FYI,Validate中的OperationContext爲null。 – 2013-02-27 17:42:33
好的,而不是HttpContext使用OperationContext。您可以從OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name獲取用戶名。在Authenitcate期間,您不會將客戶添加到會話中。您首次請求客戶數據時將其添加到會話中。此時用戶已通過身份驗證,並且會話可用於您的服務。 – Chandermani 2013-02-28 07:09:10
Validate中的OperationContext爲null。 UserNamePasswordValidator在不同的上下文/線程中運行。 – 2013-03-05 23:56:29