서비스 계약
서비스 계약은 서비스의 서명, 교환하는 데이터, 기타 계약적으로 필요한 데이터를 지정합니다. 서비스는 오퍼레이션의 그룹입니다. 서비스 계약을 작성하려면 오퍼레이션을 모델링하고 해당 그룹을 지정해야 합니다. WCF 응용프로그램의 모델에서, 먼저 인터페이스를 모델링하고 «ServiceContract» 스테레오타입을 적용하여 서비스 계약을 작성하십시오. 그런 다음 UML 오퍼레이션(C# 메소드로 스테레오타입 지정)을 작성하고 «OperationContract» 스테레오타입을 적용하여 오퍼레이션을 정의하십시오.
«OperationContract» 스테레오타입이 없는 오퍼레이션은 서비스 오퍼레이션이 아니므로, 코드 생성 후 WCF 서비스의 클라이언트가 사용하도록 노출되지 않습니다. 선언된 액세스 범위 내의 오브젝트만 호출할 수 있습니다.
메시지 계약
SOAP 메시지의 스키마 생성을 지원하기 위해 사용됩니다. 일반적으로, 사용자 정의 SOAP 헤더를 포함하는 메시지를 정의하려는 경우나 여러 데이터 계약 유형에서 메시지를 작성하려는 경우에 메시지 계약을 사용합니다.
데이터 계약 직렬화 프로그램으로 SOAP 스키마에서 생성되는 경우 특정 규칙을 준수해야 합니다. 예를 들어, WS-I 기본 프로파일 준수 서비스의 SOAP 본문 요소에는 하나의 하위 요소만 포함될 수 있습니다. 많은 경우, 데이터 계약 직렬화 프로그램의 기본 동작(MessageContract 속성이 작동하기 시작하는)을 사용하는 대신 해당 스키마를 제어해야 할 수도 있습니다.
MessageContract 속성은 메시지 헤더나 본문에 추가될 데이터 유형 또는 계약을 정의하는 클래스에 대해 사용됩니다. 다음 코드 예제는 메시지 계약 클래스 FindEmployeeRequest에 포함되는 데이터 계약 클래스 SearchCriteria를 보여 줍니다.
데이터 계약
데이터 계약은 교환할 데이터를 요약하여 설명하는 클라이언트와 서비스 사이의 정규 계약입니다. 즉, 클라이언트와 서비스는 통신하기 위해 동일한 유형을 공유하지 않아도 되며 데이터 계약만 동일하면 됩니다. 데이터 계약은 매개변수나 리턴 유형마다 교환되도록 직렬화되는(XML로 됨) 데이터를 정확하게 정의합니다.
데이터 계약 기본사항
WCF(Windows Communication Foundation)는 기본적으로 데이터 계약 직렬화 프로그램이라고 하는 직렬화 엔진을 사용하여 데이터를 직렬화하고 직렬화 해제합니다(XML로 변환하고 XML로부터 변환됨). 모든 .NET 프레임워크 기본 유형(예: 정수 및 문자열)과 기본 유형으로 처리되는 특정 유형(예: DateTime 및 XmlElement)은 다른 준비 없이 직렬화될 수 있으므로 기본 데이터 계약을 보유하는 것으로 간주됩니다. 많은 .NET 프레임워크 유형도 기존의 데이터 계약을 보유합니다. 직렬화 가능 유형의 전체 목록은 데이터 계약 직렬화 프로그램이 지원하는 유형을 참조하십시오.
사용자가 작성하는 새 복합 유형에는 직렬화 가능하도록 정의된 데이터 계약이 있어야 합니다. 기본적으로 DataContractSerializer는 데이터 계약을 추측하고 공용으로 볼 수 있는 모든 유형을 직렬화합니다. 유형의 모든 공용 읽기/쓰기 특성 및 필드가 직렬화됩니다. IgnoreDataMemberAttribute를 사용하여 구성원이 직렬화에서 참여하지 않도록 할 수 있습니다. 또한 DataContractAttribute 및 DataMemberAttribute 속성을 사용하여 데이터 계약을 명시적으로 작성할 수도 있습니다. 이는 일반적으로 유형에 DataContractAttribute 속성을 적용하여 수행됩니다. 이 속성은 클래스, 구조체 및 열거에 적용될 수 있습니다. DataMemberAttribute 속성은 데이터 구성원임(즉, 직렬화해야 함)을 표시하기 위해 데이터 계약 유형의 각 구성원에 적용해야 합니다. 자세한 정보는 직렬화 가능 유형을 참조하십시오.