2008-11-10 63 views
6

我最近編寫了一個webservice,用於使用ASP.net成員資格和角色的Silverlight。調用WCF時的空HttpContext webservice

要驗證客戶端的服務,我看HTTPContext.Current.User

但(當服務從Silverlight的叫其中一期工程),我一直在試圖從ASP調用相同的服務.net回發。但是當我通過服務時,HTTPContext.Current有一個用戶名的emplty字符串。

我猜我有沒有在web.config文件中導致httpContext不能通過代理髮送到我的服務?

任何想法,將不勝感激。我需要能夠使用asp.net成員資格和角色以某種方式驗證客戶端,並使其能夠從asp.net客戶端和silverlight客戶端中運行。

+0

您能否更詳細地解釋一下ASP.NET調用的來源?它與服務在同一個環境中嗎?您是否強迫他們在登錄該服務之前登錄該網站? – Bryant 2008-11-10 23:46:28

+0

他們在網站上登錄(儘管他們可以在不登錄的情況下瀏覽)我在回發期間致電該服務。我可以查看填寫登錄用戶的回發中的HttpContext。但是在服務端,HttpContext是空的。 – JSmyth 2008-11-11 01:37:11

回答

0

我想這可能是因爲我的wcf服務在我的silverlight.web項目中,也許他們在共享時更友好。

我可能需要了解更多有關wcf的信息,並通過設置一個獨立的webservice項目來創建更大的關注點。

1

相反的HttpContext的嘗試ServiceSecurityContext.Current.PrimaryIdentity

0

更新:

好,我查看了使用招

HTTP POST請求看起來像Silverlight應用程序被髮送「狀態'與授權cookie和我的asp.net應用程序不是。

看起來我需要在致電服務時發送狀態+我的授權cookie。我可能需要儘快制定一個新的問題...

2

我已經解決了!

默認情況下,Silverlight應用程序將所有瀏覽器cookie發送到服務。其中一個cookie是「.ASPXAUTH」cookie,用於對會員和角色進行身份驗證。

但是,asp.net應用程序並未向服務發送cookie。要發送授權cookie,我在調用webservice方法之前使用了以下代碼。

using (OperationContextScope scope = new OperationContextScope(ws.InnerChannel)) 
    { 
HttpRequestMessageProperty httpRequest = new HttpRequestMessageProperty(); 
OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, httpRequest); 

      HttpCookieCollection cc = Page.Request.Cookies; 
      if (Request.Cookies[".ASPXAUTH"] != null) 
      { 
       HttpCookie aCookie = Request.Cookies[".ASPXAUTH"]; 
       String authcookieValue = Server.HtmlEncode(aCookie.Value); 
       httpRequest.Headers.Add("Cookie: " + ".ASPXAUTH=" + authcookieValue); 

      } 
// Webservice call goes here 
    }