다음을 통해 공유


시작하기 예제

GettingStarted 샘플은 WCF(Windows Communication Foundation)를 사용하여 일반적인 서비스 및 일반적인 클라이언트를 구현하는 방법을 보여 줍니다. 이 샘플은 다른 모든 기본 기술 샘플의 기초입니다.

비고

이 샘플에 대한 설치 절차 및 빌드 지침은 이 항목의 끝에 있습니다.

서비스는 공개적으로 메타데이터로 노출하는 서비스 계약에서 수행하는 작업을 설명합니다. 서비스에는 작업을 구현하는 코드도 포함되어 있습니다.

클라이언트에는 서비스 계약에 대한 정의와 서비스에 액세스하기 위한 프록시 클래스가 포함됩니다. 프록시 코드는 ServiceModel 메타데이터 유틸리티 도구(Svcutil.exe)를 사용하여 서비스 메타데이터에서 생성됩니다.

Windows Vista에서 서비스는 WAS(Windows 정품 인증 서비스)에서 호스트됩니다. Windows XP 및 Windows Server 2003에서는 IIS(인터넷 정보 서비스) 및 ASP.NET 호스트됩니다. IIS 또는 WAS에서 서비스를 호스팅하면 서비스가 처음으로 액세스할 때 자동으로 활성화될 수 있습니다.

비고

IIS 대신 콘솔 애플리케이션에서 서비스를 호스트하는 샘플을 시작하려면 자체 호스트 샘플을 참조하세요.

서비스 및 클라이언트는 배포 시 유연성을 제공하는 구성 파일 설정에 액세스 세부 정보를 지정합니다. 여기에는 주소, 바인딩 및 계약을 지정하는 엔드포인트 정의가 포함됩니다. 바인딩은 서비스에 액세스하는 방법에 대한 전송 및 보안 세부 정보를 지정합니다.

서비스는 해당 메타데이터를 게시하도록 런타임 동작을 구성합니다.

서비스는 요청-회신 통신 패턴을 정의하는 계약을 구현합니다. 계약은 수학 연산(추가, 빼기, 곱하기 및 나누기)을 노출하는 인터페이스에 의해 ICalculator 정의됩니다. 클라이언트는 지정된 수학 연산에 대한 요청을 수행하고 서비스는 결과로 회신합니다. 서비스는 다음 코드에 정의된 계약을 구현 ICalculator 합니다.

' Define a service contract.
    <ServiceContract(Namespace:="http://Microsoft.Samples.GettingStarted")>
     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
// 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);
}

서비스 구현은 다음 예제 코드와 같이 적절한 결과를 계산하고 반환합니다.

' Service class which implements the service contract.
Public Class CalculatorService
Implements ICalculator
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Return n1 + n2
End Function

Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Return n1 - n2
End Function

Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Return n1 * n2
End Function

Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Return n1 / n2
End Function
End Class
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
    public double Add(double n1, double n2)
    {
        return n1 + n2;
    }
    public double Subtract(double n1, double n2)
    {
        return n1 - n2;
    }
    public double Multiply(double n1, double n2)
    {
        return n1 * n2;
    }
    public double Divide(double n1, double n2)
    {
        return n1 / n2;
    }
}

서비스는 다음 샘플 구성과 같이 구성 파일(Web.config)을 사용하여 정의된 서비스와 통신하기 위한 엔드포인트를 노출합니다.

<services>
    <service
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
        <!-- ICalculator is exposed at the base address provided by
         host: http://localhost/servicemodelsamples/service.svc.  -->
       <endpoint address=""
              binding="wsHttpBinding"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
       ...
    </service>
</services>

서비스는 IIS 또는 WAS 호스트에서 제공하는 기본 주소에 엔드포인트를 노출합니다. 바인딩은 주소 지정 및 보안을 위한 HTTP 통신 및 표준 웹 서비스 프로토콜을 제공하는 표준 WSHttpBinding으로 구성됩니다. 계약은 서비스에서 구현한 계약입니다 ICalculator .

구성된 대로 동일한 컴퓨터의 클라이언트에서 http://localhost/servicemodelsamples/service.svc 서비스에 액세스할 수 있습니다. 원격 컴퓨터의 클라이언트가 서비스에 액세스하려면 localhost 대신 정규화된 도메인 이름을 지정해야 합니다.

프레임워크는 기본적으로 메타데이터를 노출하지 않습니다. 따라서 서비스는 ServiceMetadataBehavior을(를) 켜고 http://localhost/servicemodelsamples/service.svc/mex에 메타데이터 교환(MEX) 엔드포인트를 노출합니다. 다음 구성은 이를 보여 줍니다.

<system.serviceModel>
  <services>
    <service
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
      ...
      <!-- the mex endpoint is exposed at
       http://localhost/servicemodelsamples/service.svc/mex -->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>

  <!--For debugging purposes set the includeExceptionDetailInFaults
   attribute to true-->
  <behaviors>
    <serviceBehaviors>
      <behavior name="CalculatorServiceBehavior">
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

클라이언트는 ServiceModel 메타데이터 유틸리티 도구(Svcutil.exe)에서 생성된 클라이언트 클래스를 사용하여 지정된 계약 형식을 사용하여 통신합니다. 이 생성된 클라이언트는 파일 generatedClient.cs 또는 generatedClient.vb 포함됩니다. 이 유틸리티는 지정된 서비스에 대한 메타데이터를 검색하고 클라이언트 애플리케이션에서 지정된 계약 유형을 사용하여 통신하는 데 사용할 클라이언트를 생성합니다. 서비스가 업데이트된 메타데이터를 검색하는 데 사용되므로 호스트된 서비스를 사용하여 클라이언트 코드를 생성할 수 있어야 합니다.

클라이언트 디렉터리의 SDK 명령 프롬프트에서 다음 명령을 실행하여 형식화된 프록시를 생성합니다.

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

Visual Basic에서 클라이언트를 생성하려면 SDK 명령 프롬프트에서 다음을 입력합니다.

Svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /l:vb /out:generatedClient.vb

생성된 클라이언트를 사용하여 클라이언트는 적절한 주소 및 바인딩을 구성하여 지정된 서비스 엔드포인트에 액세스할 수 있습니다. 서비스와 마찬가지로 클라이언트는 구성 파일(App.config)을 사용하여 통신하려는 엔드포인트를 지정합니다. 클라이언트 엔드포인트 구성은 다음 예제와 같이 서비스 엔드포인트, 바인딩 및 계약에 대한 절대 주소로 구성됩니다.

<client>
     <endpoint
         address="http://localhost/servicemodelsamples/service.svc"
         binding="wsHttpBinding"
         contract=" Microsoft.ServiceModel.Samples.ICalculator" />
</client>

클라이언트 구현은 다음 예제 코드와 같이 클라이언트를 인스턴스화하고 형식화된 인터페이스를 사용하여 서비스와 통신을 시작합니다.

' Create a client
Dim client As New CalculatorClient()

' Call the Add service operation.
            Dim value1 = 100.0R
            Dim value2 = 15.99R
            Dim result = client.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)

' Call the Subtract service operation.
value1 = 145.00R
value2 = 76.54R
result = client.Subtract(value1, value2)
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result)

' Call the Multiply service operation.
value1 = 9.00R
value2 = 81.25R
result = client.Multiply(value1, value2)
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result)

' Call the Divide service operation.
value1 = 22.00R
value2 = 7.00R
result = client.Divide(value1, value2)
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result)

'Closing the client gracefully closes the connection and cleans up resources
// Create a client.
CalculatorClient client = new CalculatorClient();

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

//Closing the client releases all communication resources.
client.Close();

샘플을 실행하면 작업 요청 및 응답이 클라이언트 콘솔 창에 표시됩니다. 클라이언트 창에서 Enter 키를 눌러 클라이언트를 종료합니다.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

시작 샘플은 서비스 및 클라이언트를 만드는 표준 방법을 보여 줍니다. 이 샘플의 다른 기본 빌드는 특정 제품 기능을 보여 줍니다.

샘플을 설정, 빌드 및 실행하려면

  1. Windows Communication Foundation 샘플 에 대한One-Time 설정 절차를 수행했는지 확인합니다.

  2. 솔루션의 C# 또는 Visual Basic .NET 버전을 빌드하려면 Windows Communication Foundation 샘플빌드의 지침을 따릅니다.

  3. 단일 또는 컴퓨터 간 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.

참고하십시오