2012-04-16 3 views
0

이중 서비스가 필요하며 사용자가 이전에 사용자 이름과 암호를 올바르게 보낸 경우에만 서비스 메서드를 사용하기 때문에 클라이언트가 사용자 이름과 암호를 올바르게 입력했는지 알고 싶습니다. .WCF :이 시나리오에서 세션 당 더 나은 통화 당?

듀플렉스의 경우이 post의 경우 콜 당 콜백 저장을위한 정적 목록을 사용하여 호출 당 이중 서비스를 사용할 수 있음을 알고 있습니다. 하지만 각 호출 메서드를 사용하여 사용자 정의 컨트롤을 수행하는 방법에 대한 의문이 있습니다.

1 .- 사용자 호출 방법 로그인을()하고 사용자 이름과 암호를 보내

나는이 경우에 생각하고있다. 이 경우에는 정확합니다.

2. 이제 사용자는 나머지 서비스 메소드를 호출 할 수 있습니다. method1()과 같습니다. 여기에 나는 질문이있다. 호출 당 메소드는 각 메소드 호출에서 새 인스턴스가 작성되지만 동일한 클라이언트에서 각 콜백마다 다른 코드가 있거나 동일합니다. 동일한 경우, 클라이언트가 다른 콜백을 가질 때, 응용 프로그램을 다시 시작할 때?

모든 통화에서 콜백이 다른 경우 클라이언트가 이전에 사용자 이름과 비밀번호를 전송했는지 어떻게 알 수 있습니까? 메서드 매개 변수로 로그와 암호를 보내야합니까?

콜백이 동일한 경우 클라이언트가 정적 목록에서 콜백을 삭제하기 위해 연결을 닫는 시점을 알 수 있습니까? 아마도 이것이 연결 제어일까요?

감사합니다.

EDIT : 일부 프로브를 수행했는데 클라이언트의 ID 인 콜백이 메소드 호출시마다 동일하므로 필요한 정보를 저장하는 클래스를 만들 수 있습니다. 이 사용자가이 콜백에 로그인과 암호를 입력 한 경우 사용자 이름 ...

답변

0

PerCall을 사용하는 경우 여전히 SessionMode = SessionMode.Required을 가질 수 있습니다. 그런 다음 wcf에 작업이 세션을 시작한다고 알리는 IsInitiating = true으로 로그인 메소드 조작 계 약 속성을 간단하게 꾸밀 수 있습니다. 다른 모든 작업은 IsInitiating = false으로 설정해야합니다. 클라이언트가 login을 호출하기 전에 세션을 시작하지 않는 메소드를 호출하면 예외가 발생합니다.

[ServiceContract(Namespace = "Services", SessionMode = SessionMode.Required, CallbackContract =   typeof(SVIMyCallback))] 

[OperationContract(Name = "login", IsInitiating = true)] 
[OperationContract(Name = "doSomething", IsInitiating = false)] 
관련 문제