수색…


소개

Windows Communication Foundation (WCF)은 서비스 지향 응용 프로그램을 작성하기위한 프레임 워크입니다. WCF를 사용하면 데이터를 한 서비스 끝점에서 다른 끝점으로 비동기 메시지로 보낼 수 있습니다. 서비스 끝점은 IIS에서 호스팅되는 지속적으로 사용할 수있는 서비스의 일부이거나 응용 프로그램에서 호스팅되는 서비스 일 수 있습니다. 메시지는 XML로 전송 된 단일 문자 나 단어처럼 간단 할 수도 있고 이진 데이터 스트림처럼 복잡 할 수도 있습니다.

시작 샘플

이 서비스는 메타 데이터로 공개적으로 노출되는 서비스 계약에서 수행하는 작업을 설명합니다.

// Define a service contract.  
[ServiceContract(Namespace="http://StackOverflow.ServiceModel.Samples")]  
public interface ICalculator  
{  
    [OperationContract]  
    double Add(double n1, double n2);
}

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

// Service class that implements the service contract.  
public class CalculatorService : ICalculator  
{  
    public double Add(double n1, double n2)  
    {  
        return n1 + n2;  
    }
}

이 서비스는 다음 예제 구성 에서처럼 구성 파일 (Web.config)을 사용하여 정의 된 서비스와 통신하기위한 끝점을 제공합니다.

<services>  
    <service   
        name="StackOverflow.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="StackOverflow.ServiceModel.Samples.ICalculator" />  
       ...  
    </service>  
</services>

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

<system.serviceModel>  
  <services>  
    <service   
        name="StackOverflow.ServiceModel.Samples.CalculatorService"  
        behaviorConfiguration="CalculatorServiceBehavior">  
      ...  
      <!-- the mex endpoint is explosed 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 Metadata Utility Tool (Svcutil.exe)에 의해 생성 된 클라이언트 클래스를 사용하여 지정된 계약 유형을 사용하여 통신합니다.

클라이언트 디렉토리의 SDK 명령 프롬프트에서 다음 명령을 실행하여 입력 된 프록시를 생성하십시오.

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

서비스와 마찬가지로 클라이언트는 구성 파일 (App.config)을 사용하여 통신하려는 끝점을 지정합니다. 클라이언트 엔드 포인트 구성은 다음 예제와 같이 서비스 엔드 포인트의 절대 주소, 바인딩 및 계약으로 구성됩니다.

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

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

// 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); 

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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow