2009-12-14 2 views
7

[OperationContract (IsOneWay = true)]와 생성 된 비동기 작업 체크 박스의 차이점은 무엇입니까?

[OperationContract(IsOneWay = true)]

속성을 가진 WCF 방법을 표시하고, 서비스 참조를 추가 할 때 비동기 동작 체크 박스를 생성하는 검사의 차이는 무엇입니까?

내가 읽은 바로는 호출의 비동기 특성은 클라이언트 측에서만 정의되어야합니다. 그럴 경우 [OperationContract(IsOneWay = true)]의 요점은 무엇입니까?

지금 당장은 WCF 메서드에서 다음 메서드를 실행하고 있습니다.

public void UpdateIndex(IndexElement[] indexElements) 
    { 
     // start the update on a new thread. 
     Thread thread = new Thread(() => UpdateIndexThread(indexElements)); 
     thread.Start(); 
    } 

나는 나의 클라이언트의 코드에서 서비스 참조를 생성하고, 단순히 전화 : indexerClient 내 WCF 서비스의 인스턴스

indexerClient.UpdateIndex(indexElements); 

.

이것도 작동해야합니까? 이것은 마치 스레드가 완료되기까지 기다리는 것처럼 보입니다.

답변

11

이들은 매우 다릅니다.

개념적 수준에서 IsOneWay = true는 메시징 패턴이 '불과 잊음'이라고 말합니다. '요청 - 응답'. 즉, IOW = true는 클라이언트에서 서버로의 메시지가 있지만 서버에서 클라이언트로의 응답이 아니라는 것을 의미합니다. 대조적으로 반환 유형이 무효 (예 : '비어있는'메시지) 인 경우에도 비 IOW = true 메소드는 일반적으로 응답 메시지를 갖습니다.

비동기 패턴은 클라이언트 코드가 작동하는 방식입니다. 반환 값을 기다리는 것을 차단하는지 여부. 비동기는 '로컬'것입니다 (자세한 내용은 this blog 참조). 동기화 서버에 대한 비동기 클라이언트 또는 비동기 서버에 대한 동기 클라이언트를 가질 수 있습니다. WCF는 두 가지 프로그래밍 모델 중 하나를 제공하기 위해 마술을 수행합니다. 예 : 요청 - 응답 메시징 패턴을 사용하고 '비동기 생성'을 사용하면 생성 된 클라이언트가 제공합니다. 비동기라고하는 방법 (예 : 메시지를 보내고 응답이 도착하면 콜백을받습니다).

'로컬 프로그래밍 모델'에는 'async'를 사용하고 '전선에서의 메시징'에는 IOW를 사용하십시오.

예제에서 IOW = true로 표시하면 서버 코드에 Thread.Start()가 필요하지 않습니다. WCF가 서버에 제공 한 스레드에서 바로 작업을 수행 할 수 있습니다.

+0

많은 의미가 있습니다! 고마워요. 많은 좌절감을 없애줍니다. – Matt

+0

정리하기 위해,이 방법은 올바르게 읽어야합니까? 즉, IOW = true는 클라이언트에서 서버로의 메시지가 있고 서버에서 클라이언트로의 응답임을 의미합니다. 대조적으로 반환 유형이 무효 (예 : '비어있는'메시지) 인 경우에도 비 IOW = true 메소드는 일반적으로 응답 메시지를 보유하지 않습니다. – Matt

+0

고마워, 한 문장 뒤로, 나는 단지 수정을 편집했습니다. – Brian