2011-09-01 5 views
1

WCF에 대한 로그인 프로세스 중에 얻은 정보를 저장하고 동일한 세션에 속하는 모든 후속 서비스 호출에서 사용할 수 있도록하는 최선의 방법을 찾고 있습니다. . 여러 WCF 통화에서 로그인 정보를 저장하는 모범 사례

는 기본적으로 나는 내 자신의 로그인 제공자 썼다 :

public class CustomAuthenticator : UserNamePasswordValidator 
    { 
    public override void Validate(string userName, string password) 
    { 
     if (username == "test" && password == "test") 
     { 
      int id_I_want_to_use = getUserID(username); 
     } 
    } 
    } 

을 그리고

public void someService(int itemID) 
{ 
    getSomeInfo(id_I_want_to_use, itemID); 
} 

의 I는 데 문제가 내가하지 않은 것입니다에 ID 나중에 사용하기 위해 필요로하는 서비스를 이것을 제대로 저장하는 방법에 대한 좋은 정보를 찾을 수있었습니다. 나는 instanceContext를 보았지만이 서버 측 모두를 수행하기를 바랬다. 데이터를 저장하기 위해 HTTP 세션을 사용하기위한 ASP 레거시 지원에 대한 정보를 보았습니다. 그러나 그것은 제가 원했던 것이 아닙니다. 나는 현재의 기술을 사용하여 모든 것을 유지하려고 노력하고 있으며, 만약 내가 그것을 도울 수 있다면 나는 http 바인딩에 묶이기를 원하지 않는다.

내가 완전히 잘못 접근하고있을 수도 있지만 기본적으로 내가 묻는 이유입니다.

답변

1

이 작업을 수행하는 방법은 그냥이 모든 서버 쪽 세션 당

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
class MyService : IMyContract {...} 

과의 계약을 표시, 인스턴스 컨텍스트를 사용하는 것입니다. 클라이언트에서 수행해야하는 유일한 작업은 세션을 활성 상태로 유지하기 위해 프록시를 열린 상태로 유지하는 것입니다. 자세한 내용은

은 다음을 참조하십시오 http://msdn.microsoft.com/en-us/magazine/cc163590.aspx

+0

내가 혼란 스러워요 같아요. 로그인에 포함 된 userID를 어떻게 저장하나요? 기본적으로 세션의 인스턴스에 사용자 ID (및 몇 개의 다른 필드)를 전달하고 세션의 각 서비스에 사용할 수있는 방법이 필요하지만 그 정보는 내 사용자 정의 로그인/유효성 검사 기능에 의해 결정됩니다. – Zipper

관련 문제