2013-01-04 1 views
0

WCF 기능WCF 세션은 여러 클라이언트가 다음 마지막에 설정된 세션은 각 클라이언트 액세스하는 서비스에 액세스하는 경우

public void SetSession(string name) 
    { 
      HttpContext.Current.Session["abc"]=name; 
    } 
    public string GetSession(string name) 
    { 
      return HttpContext.Current.Session["abc"].ToString(); 
    } 

프록시

 using (ServiceReference1.BlackjackClient proxy = new ServiceReference1.BlackjackClient()) 
     { 
      proxy.SetSession("Hello"); 
     } 

내 문제가 특정 사용자에게 특정되지 않습니다. 세션은 클라이언트 요청을 기반으로하지 않으며 클라이언트를 인식하지 못합니다. 어떤 클라이언트가 어떤 요청을 보냈습니까? 각 클라이언트별로 고유하게하려면 어떻게해야합니까? 각 클라이언트가 자신의 세션을 가져야 함을 의미합니다.

답변

1

이 서비스는 서비스를 호출하는 클라이언트 알 수 없다 도와주세요. 정규 asp.net 사용 Session은 쿠키를 사용하여 각 요청을 식별하고 요청을 올바른 세션에 매핑하는 내부 부두를 만듭니다.

귀하의 경우 서비스에서 요청을 식별 할 수 있도록 클라이언트의 로그인을 사용해야하지만 문제가 자체 해결되지는 않습니다. 당신이 서비스 구현에 액세스 할 수 있기 때문에

가장 간단한 해결책은 아마 이렇게 변경 클라이언트의 세션 식별자 (A Guid)를 저장하고 웹 서비스에 대한 각각의 요청에 따라이를 보낼 것

public void SetSession(string name) 
    { 
      HttpContext.Current.Session["abc"]=name; 
    } 
    public string GetSession(string name) 
    { 
      return HttpContext.Current.Session["abc"].ToString(); 
    } 
뭔가

이 있지만 오히려 추한이지만, 아이디어가 될 것 같은 클라이언트가 호출 따라서 세션을 식별 서버를 돕는 것을, 메서드 서명을 수정

public void SetSession(string name, Guid sessionId) 
{ 
     HttpContext.Current.Session[sessionId + "_abc"]=name; 
} 
public string GetSession(string name, Guid sessionId) 
{ 
     return HttpContext.Current.Session[sessionId + "_abc"].ToString(); 
} 

있다.

발신자를 식별하기 위해 전송 프로토콜을 사용하는 것이 더 깨끗하기 때문에 HTTP 서비스를 만드는 경우 일부 HTTP 헤더 (아마도 인증)를 사용하여 세션 식별자를 포함 할 수 있습니다. SOAP를 사용하는 경우 메시지 헤더에 동일한 정보가 포함될 수 있습니다.

Guid CreateSession()과 같은 새 메서드를 사용하여 서비스에서 세션 식별자를 만들 수도 있습니다. 그러나 Guid는 클라이언트에서도 생성 될 수 있습니다.

다시 : 클라이언트에 고유 한 세션 ID 또는 사용자 자격 증명을 저장하고 요청할 때마다 서버와 통신해야합니다.

+0

답장을 보내 주셔서 감사합니다. 코드를 구현하고 어떤 일이 발생하는지 살펴 보겠습니다. –

+0

둘 다 동일한 도메인에서 호스팅되는 경우 어떻게해야합니까? –

+0

Windows 인증을 사용할 수는 있지만 클라이언트 식별을 위해 더 많은 작업을 수행해야합니다. – faester