2008-11-10 3 views
6

최근에 ASP.net 멤버십과 역할을 사용하는 Silverlight에서 사용할 웹 서비스를 작성했습니다. WCF 웹 서비스 호출시 빈 HttpContext

그러나

(서비스가 실버 라이트에서 호출 될 때 작동한다) 나는 HTTPContext.Current.User 보는 서비스에서 클라이언트를 확인하려면, 나는 ASP에서 동일한 서비스를 호출하려고했는데 .net 포스트 백. 하지만 서비스를 단계별로 살펴보면 HTTPContext.Current에는 사용자 이름에 대한 emplty 문자열이 있습니다.

내 서비스에 프록시를 통해 httpContext를 전송하지 못하게하는 web.config 파일에서 수행하지 않는 작업이 있다고 생각합니까?

모든 아이디어를 얻을 수 있습니다. 난 asp.net 회원 및 역할을 사용하여 클라이언트를 어떻게 든 검증 할 수 있어야하고 asp.net 클라이언트와 실버 라이트 클라이언트 모두에서 작동하도록 할 수 있어야합니다.

+0

ASP.NET 호출의 출처에 대해 조금 더 설명 할 수 있습니까? 그것은 서비스와 같은 맥락인가? 서비스를 받기 전에 사이트에 로그인하도록 강요합니까? – Bryant

+0

그들은 사이트에 로그인합니다 (로그인하지 않고도 찾아 볼 수 있지만). 나는 다시 게시하는 동안 서비스를 호출합니다. 로그인 한 사용자로 채워지는 포스트 백에서 HttpContext를 볼 수 있습니다. 그러나 서비스 측면에서 HttpContext는 비어 있습니다. – JSmyth

+0

동일한 컨텍스트가 무엇을 의미하는지 정확히 알지 못한다면 서비스가 다른 곳에서 호스팅되는 것입니다. – JSmyth

답변

0

내 wcf 서비스가 내 silverlight.web 프로젝트에 있고 아마도 공유 할 때 더 친숙 할 수 있다고 생각합니다.

wcf에서 더 많은 내용을 읽고 별도의 웹 서비스 프로젝트를 설정하여 더 큰 문제를 만들 필요가 있습니다. 대신 ServiceSecurityContext.Current.PrimaryIdentity를 시도으로 HttpContext의

1

+0

ServiceSecurityContext가 null입니다. - 이 서비스의 경우 인증서를 설치해야합니까? – JSmyth

0

업데이트 :

피들러

를 사용하여 HTTP POST 요청에 대해 살펴 촬영 '은을 보내고있는 실버 라이트 응용 프로그램처럼 보이는 한 확인

주 '승인 쿠키와 내 asp.net 응용 프로그램이 아닙니다.

서비스를 호출 할 때 상태 + 인증 쿠키를 보내야합니다. 곧 새로운 질문을 공식화해야 할 수도 있습니다 ...

2

나는 그것을 해결했습니다!

기본적으로 Silverlight 응용 프로그램은 모든 브라우저 쿠키를 서비스에 보내는 것처럼 보입니다. 이러한 쿠키 중 하나는 멤버 자격 및 역할에 대해 인증하는 ".ASPXAUTH"쿠키입니다.

그러나 asp.net 응용 프로그램은 쿠키를 서비스에 보내지 않았습니다. 인증 쿠키를 보내려면 웹 서비스 메서드를 호출하기 전에 다음 코드를 사용했습니다.

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 
    }