방법: Windows Communication Foundation 서비스 계약 정의
이 작업은 기본 WCF(Windows Communication Foundation) 서비스와 이 서비스를 호출할 수 있는 클라이언트를 만드는 데 필요한 6가지 작업 중 첫 번째입니다. 6가지 작업의 개요를 모두 보려면 초보자를 위한 자습서 항목을 참조하십시오.
기본 WCF 서비스를 만들 때 첫 번째 작업은 계약을 정의하는 것입니다. 계약은 서비스가 지원하는 작업을 지정합니다. 작업은 웹 서비스 메서드로 간주될 수 있습니다. C++, C# 또는 VB(Visual Basic) 인터페이스를 정의하여 계약을 만듭니다. 인터페이스의 각 메서드는 특정 서비스 작업에 해당합니다. 각 인터페이스에는 ServiceContractAttribute가 적용되어야 하고 각 작업에는 OperationContractAttribute가 적용되어야 합니다. ServiceContractAttribute를 포함하는 인터페이스 내에 있는 메서드에 OperationContractAttribute가 없으면 해당 메서드가 노출되지 않습니다.
이 작업에 사용되는 코드는 이 절차 다음에 나오는 예제에 제공되어 있습니다.
인터페이스를 사용하여 Windows Communication Foundation 계약을 만들려면
시작 메뉴에서 Visual Studio 2010를 마우스 오른쪽 단추로 클릭한 다음 관리자 권한으로 실행을 선택하여 해당 프로그램을 관리자로 엽니다.
새 콘솔 응용 프로그램 프로젝트를 만듭니다. 파일 메뉴를 클릭하고 새로 만들기, 프로젝트를 차례로 선택합니다. 새 프로젝트 대화 상자에서 Visual Basic 또는 **Visual C#**을 선택하고 콘솔 응용 프로그램 템플릿을 선택한 다음 이름을
Service
로 지정합니다. 기본 위치를 사용합니다.C# 프로젝트의 경우 Visual Studio에서 Program.cs라는 파일이 만들어집니다. 이 클래스에는 Main()이라는 빈 메서드가 포함됩니다. VB 프로젝트의 경우 Visual Studio에서 Main()이라는 빈 서브루틴이 포함된 Module1.vb라는 파일이 만들어집니다. 이러한 메서드는 콘솔 응용 프로그램 프로젝트를 올바르게 빌드하는 데 필요하므로 프로젝트에 안전하게 보관할 수 있습니다.
기본
Service
네임스페이스를Microsoft.ServiceModel.Samples
로 변경합니다. 이렇게 하려면 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 속성 대화 상자의 왼쪽에 있는 응용 프로그램 탭이 선택되어 있는지 확인합니다. C# 프로젝트의 경우 기본 네임스페이스라는 입력란에Microsoft.ServiceModel.Samples
를 입력합니다. VB 프로젝트의 경우 루트 네임스페이스라는 입력란에Microsoft.ServiceModel.Samples
를 입력합니다. 파일 메뉴를 클릭하고 모두 저장을 선택하여 변경 내용을 저장합니다.C#을 사용하는 경우 다음 예제와 같이 생성된 Program.cs 파일의 네임스페이스를
Microsoft.ServiceModel.Samples
로 변경합니다.namespace Microsoft.ServiceModel.Samples { class Program { static void Main(string[] args) { } } }
VB를 사용하는 경우 다음 예제와 같이 생성된 Module1.vb에 Namespace 문과 End Namespace 문을 추가합니다.
Namespace Microsoft.ServiceModel.Samples Module Module1 Sub Main() End Sub End Module End Namespace
다음과 같이 System.ServiceModel.dll에 대한 참조를 프로젝트에 추가합니다.
솔루션 탐색기의 프로젝트 폴더 아래에서 참조 폴더를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.
참조 추가 대화 상자에서 .NET 탭을 선택하고 System.ServiceModel(버전 4.0.0.0)이 나타날 때까지 아래로 스크롤하여 이 항목을 선택한 다음 확인을 클릭합니다.
참고: Csc.exe 또는 Vbc.exe와 같은 명령줄 컴파일러를 사용하는 경우 어셈블리의 경로도 제공해야 합니다. 예를 들어 Windows Vista를 실행하는 컴퓨터에서 기본 경로는 "Windows\Microsoft.NET\Framework\v4.0"입니다. System.ServiceModel 네임스페이스에 대한 using 문(Visual Basic의 경우 Imports)을 추가합니다.
Imports System.ServiceModel
using System.ServiceModel;
ICalculator
라고 하는 새 인터페이스를 정의하고 ServiceContractAttribute 특성을 Namespace 값이 "http://Microsoft.ServiceModel.Samples"인 인터페이스에 적용합니다. 네임스페이스를 명시적으로 지정하면 기본 네임스페이스 값이 계약 이름에 추가되지 않기 때문에 되도록이면 명시적으로 지정하는 것이 좋습니다.참고: 특성을 사용하여 인터페이스 또는 클래스에 주석을 달 때 특성 이름에서 "특성" 부분을 삭제할 수 있습니다. 따라서 ServiceContractAttribute는 [ServiceContract](C#의 경우) 또는 <ServiceContract>(Visual Basic의 경우)가 됩니다. <ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _ Public Interface ICalculator
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] public interface ICalculator
ICalculator
계약이 인터페이스 내에서 노출(더하기, 빼기, 곱하기, 나누기)하는 각 작업에 대한 메서드를 선언하고 공용 WCF 계약의 일부로 노출할 각 메서드에 OperationContractAttribute 특성을 적용합니다.<OperationContract()> _ Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double <OperationContract()> _ Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double <OperationContract()> _ Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double <OperationContract()> _ Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
[OperationContract] double Add(double n1, double n2); [OperationContract] double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2);
예제
다음 코드 예제에서는 서비스 계약을 정의하는 기본 인터페이스를 보여 줍니다.
Imports System
' Step 5: Add the Imports statement for the System.ServiceModel namespace
Imports System.ServiceModel
Namespace Microsoft.ServiceModel.Samples
' Step 6: Define a service contract.
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
<OperationContract()> _
Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()> _
Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()> _
Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()> _
Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
End Interface
End Namespace
using System;
// Step 5: Add the using statement for the System.ServiceModel namespace
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
// Step 6: Define a service contract.
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
// Step7: Create the method declaration for the contract.
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
}
인터페이스를 만든 후에는 방법: Windows Communication Foundation 서비스 계약 구현을 진행하여 인터페이스를 구현합니다. 문제 해결 정보에 대한 자세한 내용은 초보자를 위한 자습서 문제 해결을 참조하십시오.
참고 항목
작업
방법: Windows Communication Foundation 서비스 계약 구현
Getting Started 샘플
Self-Host