방법: Windows Communication Foundation 서비스 계약 구현
이 작업은 기본 WCF(Windows Communication Foundation) 서비스와 이 서비스를 호출할 수 있는 클라이언트를 만드는 데 필요한 6가지 작업 중 두 번째입니다. 6가지 작업의 개요를 모두 보려면 초보자를 위한 자습서 항목을 참조하십시오.
WCF 서비스를 만들려면 먼저 인터페이스를 사용하여 정의된 계약을 만들어야 합니다. 인터페이스를 만드는 방법에 대한 자세한 내용은 방법: Windows Communication Foundation 서비스 계약 정의를 참조하십시오. 이 예제에서처럼 다음 단계에서는 인터페이스를 구현합니다. 여기에는 사용자 정의 ICalculator 인터페이스를 구현하는 CalculatorService 클래스의 생성이 포함됩니다. 이 작업에 사용되는 코드는 이 절차 다음에 나오는 예제에 제공되어 있습니다.
WCF 서비스 계약을 구현하려면
ICalculator
인터페이스를 정의한 동일한 파일에서CalculatorService
라는 새 클래스를 만듭니다.CalculatorService
는ICalculator
인터페이스를 구현합니다.Public Class CalculatorService Implements ICalculator
public class CalculatorService : ICalculator
CalculatorService
클래스 내에서ICalculator
인터페이스에 정의한 각 메서드를 구현합니다.Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add Dim result As Double = n1 + n2 ' Code added to write output to the console window. Console.WriteLine("Received Add({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract Dim result As Double = n1 - n2 Console.WriteLine("Received Subtract({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply Dim result As Double = n1 * n2 Console.WriteLine("Received Multiply({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide Dim result As Double = n1 / n2 Console.WriteLine("Received Divide({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function
public double Add(double n1, double n2) { double result = n1 + n2; Console.WriteLine("Received Add({0},{1})", n1, n2); // Code added to write output to the console window. Console.WriteLine("Return: {0}", result); return result; } public double Subtract(double n1, double n2) { double result = n1 - n2; Console.WriteLine("Received Subtract({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } public double Multiply(double n1, double n2) { double result = n1 * n2; Console.WriteLine("Received Multiply({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } public double Divide(double n1, double n2) { double result = n1 / n2; Console.WriteLine("Received Divide({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; }
참고: 쓰기 출력 코드가 추가되어 테스트가 편리해졌습니다.
예제
다음 코드 예제에서는 계약을 정의하는 인터페이스와 인터페이스 구현을 모두 보여 줍니다.
Imports System
Imports System.ServiceModel
Namespace Microsoft.ServiceModel.Samples
' 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
' Step 1: Create service class that implements the service contract.
Public Class CalculatorService
Implements ICalculator
' Step 2: Implement functionality for the service operations.
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Dim result As Double = n1 + n2
' Code added to write output to the console window.
Console.WriteLine("Received Add({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Dim result As Double = n1 - n2
Console.WriteLine("Received Subtract({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Dim result As Double = n1 * n2
Console.WriteLine("Received Multiply({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Dim result As Double = n1 / n2
Console.WriteLine("Received Divide({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
End Class
End Namespace
using System;
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
// Define a service contract.
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[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);
}
// Step 1: Create service class that implements the service contract.
public class CalculatorService : ICalculator
{
// Step 2: Implement functionality for the service operations.
public double Add(double n1, double n2)
{
double result = n1 + n2;
Console.WriteLine("Received Add({0},{1})", n1, n2);
// Code added to write output to the console window.
Console.WriteLine("Return: {0}", result);
return result;
}
public double Subtract(double n1, double n2)
{
double result = n1 - n2;
Console.WriteLine("Received Subtract({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
public double Multiply(double n1, double n2)
{
double result = n1 * n2;
Console.WriteLine("Received Multiply({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
public double Divide(double n1, double n2)
{
double result = n1 / n2;
Console.WriteLine("Received Divide({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
}
}
이제 서비스 계약이 만들어지고 구현되었습니다. 솔루션을 빌드하여 컴파일 오류가 없는지 확인한 다음 방법: 기본 Windows Communication Foundation 서비스 호스트 및 실행을 진행하여 서비스를 실행합니다. 문제 해결 정보에 대한 자세한 내용은 초보자를 위한 자습서 문제 해결을 참조하십시오.
코드 컴파일
명령줄 컴파일러를 사용하는 경우 System.ServiceModel 어셈블리를 참조해야 합니다.
Visual Studio를 사용하는 경우에는 빌드 메뉴에서 솔루션 빌드를 클릭하거나 Ctrl+Shift+B를 누릅니다.