2011-09-21 3 views
1

호스트 : 함수는 다음과 같습니다. IsOneWay=FalseIsOneWay = false 일 때 wcf가 클라이언트를 차단하는 방법은 무엇입니까?

이 함수가 호출되었을 때 - MessageBox가 HOST에 나타납니다.

클라이언트 : 에만 호스트 기능을 호출하는 버튼이있는 winform이 있습니다.

호스트 클라이언트 버튼 (이 호스트에서 메시지 박스를 해제했는지을 신경 쓰지 않습니다.

하지만 IsOneWay = False 인 경우 - 한 번 (까지까지 호스트의 MesageBox를 릴리스)를 누릅니다.

host does he do that ? 

How the Client knows that he should be blocked until the user releases the MessageBox on the Host side ? 

답변

3

WCF 호스트 ISN ' 메시지 상자가 닫힐 때까지 클라이언트에 응답하지 마십시오.

클라이언트 쪽에서 디버거를 중단하려면 코드가 여전히 호스트에 대한 WCF 호출 내에 있는지 확인해야합니다. 충분히 길게 기다린다면 결국 시간이 초과 될 것입니다. IsOneWay=false은 클라이언트가 계속 실행하기 전에 서버를 반환해야하기 때문에 WCF가이 작업을 수행 할 수 있습니다. IsOneWay=true 클라이언트가 요청을 보내면 서버가 즉시 응답하여 서버 코드가 실행되기 전에 클라이언트가 계속 성공할 수 있습니다.

IsOneWay=false 
    Client  Server 
    ------ | ------ 
1. click --> method --> messagebox waits for OK 
(client can't continue until server returns) 
2. continue <-- method <-- user dismisses messagebox 

IsOneWay=true 
    Client  Server 
    ------ | ------ 
1. click --> method --> messagebox waits for OK 
(client continues regardless of server state) 
2. click --> method --> 2nd messagebox waits for OK 
          user dismisses messageboxes 
etc... 
+0

호스트와 클라이언트가 별도의 컴퓨터에 있고 바인딩이 HTTP 인 경우 내 클라이언트 단추가 여전히 잠겨 있습니까? –

+0

그래야합니다. 클라이언트는 서버로부터 응답을받은 후에 만 ​​계속 진행됩니다. 클라이언트 관점에서 보았을 때 오랫동안 실행중인 데이터베이스 작업 일 수 있습니다. 서버가 메시지 상자를 팝업했는지 여부는 알 수 없습니다. – Joshua

+0

@LadislavMrnka : 나는 그것을 조금 분명히했다. 서버는 즉시 성공적으로 응답하므로 사용자 코드가 실행되기 전에 클라이언트가 연결을 끊고 계속할 수 있습니다. – Joshua

관련 문제