방법: 요청-회신 계약 만들기
이 항목에서는 요청-회신 계약을 사용하는 메서드를 만드는 기본 단계를 보여 줍니다. 이러한 메서드는 WCF(Windows Communication Foundation) 서비스에 대한 작업을 호출하고 회신을 기다립니다. 회신은 이 계약 조건 하의 요청에 따라 전송되고 상호 관련되어야 합니다. 메서드가 void를 반환한 경우에도 인프라에서 빈 메시지를 만들어 보내 메서드가 반환되었음을 호출자에게 나타냅니다. 회신 메시지의 생성 및 디스패치를 취소하는 유일한 방법은 작업에 대한 단방향 계약을 사용하는 것입니다.
작업 계약을 지정하는 방법에 대한 자세한 내용은 OperationContractAttribute 클래스와 특히, IsOneWay 속성을 참조하십시오.
이중 계약에 대한 클라이언트 응용 프로그램의 생성에 대한 자세한 내용은 방법: 단방향 및 요청-회신 계약을 사용하여 WCF 서비스 액세스를 참조하십시오.
요청-회신 계약을 만들려면
ServiceContractAttribute 클래스를 서비스가 구현할 메서드를 정의하는 인터페이스에 적용하여 서비스 계약을 만듭니다.
OperationContractAttribute 클래스를 클라이언트가 호출할 수 있는 인터페이스의 메서드에 적용하여 해당 메서드를 나타냅니다.
IsOneWay 속성 값은 작업이 회신 메시지를 반환할지 여부를 나타냅니다. 작업에 요청-회신 계약이 있는 경우 이 속성은 false로 설정됩니다. 작업에 단방향 계약이 있는 경우 속성은 true로 설정됩니다. OperationContractAttribute 클래스가 있는 모든 작업은 IsOneWay 속성이 기본적으로 false이기 때문에 기본적으로 요청-회신 계약을 충족합니다. 따라서 특성 속성 값을 명시적으로 false로 지정하는 것은 선택 사항입니다.
예제
다음 샘플에서는 Add 및 Subtract 메서드를 제공하는 계산기 서비스에 대한 계약을 정의합니다. 이 계약을 사용하여 클라이언트는 Add 및 Subtract 메서드를 호출하고 합과 차이가 각각 반환될 때까지 기다립니다. Multiply 메서드는 OperationContractAttribute 클래스에 의해 표시되지 않으므로 계약의 일부가 아니며, 따라서 클라이언트에 액세스할 수 없습니다.
using System.ServiceModel;
[ServiceContract]
public interface ICalculator
{
[OperationContract]
// It would be equivalent to write explicitly:
// [OperationContract(IsOneWay=false)]
int Add(int a, int b);
[OperationContract]
int Subtract(int a, int b);
int Multiply(int a, int b)
}
- 서비스 계약 인터페이스를 ServiceContractAttribute 클래스로 표시하고 메서드를 OperationContractAttribute 클래스로 표시하면 WSDL(웹 서비스 기술 언어), 클라이언트 계약 및 코드에서 서비스가 한 번 배포되고 나면 서비스 계약 정의가 자동으로 생성됩니다.
- 서비스가 작업 및 해당 입력과 출력을 지정하는 표준 WSDL 문서로 배포될 경우 WCF 서비스 계약의 외부에서 표시 가능한 정의에 액세스할 수 있습니다. WSDL은 ?wsdl 쿼리를 서비스의 HTTP 기본 주소에 추가하고 결과 URI(Uniform Resource Identifier)에서 브라우저를 가리켜서 표시합니다.