방법: 기본 웹 스타일 서비스 만들기

WCF(Windows Communication Foundation)에서는 웹 끝점을 노출하는 서비스를 만들 수 있습니다. 웹 끝점은 일반 XML로 데이터를 보내며 SOAP 봉투가 없습니다. 이 항목에서는 이러한 끝점을 노출하는 방법을 보여 줍니다.

참고

웹 끝점의 보안을 유지하는 유일한 방법은 전송 보안을 사용하여 HTTPS를 통해 웹 끝점을 노출하는 것입니다. 메시지 기반 보안을 사용하는 경우 보안 정보는 일반적으로 SOAP 헤더에 배치되고 비 SOAP 끝점에 보낸 메시지에 SOAP 봉투가 없기 때문에 보안 정보를 배치할 장소가 없으며 전송 보안을 사용해야 합니다.

웹 끝점을 만들려면

  1. ServiceContractAttribute, WebInvokeAttributeWebGetAttribute 특성으로 표시된 인터페이스를 사용하여 서비스 계약을 정의합니다.

    참고

    기본적으로 WebInvokeAttribute는 POST 호출을 작업에 매핑합니다. 그러나 "method=" 매개 변수를 지정하여 작업에 매핑할 메서드를 지정할 수 있습니다. WebGetAttribute에는 "method=" 매개 변수가 없고 GET 호출만 서비스 작업에 매핑합니다.

  2. 서비스 계약을 구현합니다.

서비스를 호스팅하려면

  1. WebServiceHost 개체를 만듭니다.

  2. ServiceEndpointWebHttpBehavior와 함께 추가합니다.

    참고

    끝점을 추가하지 않으면 WebServiceHost가 자동으로 기본 끝점을 만듭니다. 또한 WebServiceHostWebHttpBehavior를 추가하고 HTTP 도움말 페이지 및 WSDL(웹 서비스 기술 언어) GET 기능을 비활성화하여 메타데이터 끝점이 기본 HTTP 끝점을 간섭하지 않도록 합니다.

    비 SOAP 끝점을 ""의 URL과 함께 추가하면 끝점에서 작업 호출 시도 시 예기치 못한 동작이 발생합니다. 그 이유는 끝점의 수신 대기 URI가 도움말 페이지(WCF 서비스의 기본 주소를 찾을 때 표시되는 페이지)의 URI와 동일하기 때문입니다.

    이러한 동작이 발생되지 않도록 하기 위해 다음 작업 중 하나를 수행할 수 있습니다.

    • 항상 비 SOAP 끝점에 공백 없는 URI를 지정합니다.
    • 도움말 페이지를 끕니다. 다음 코드를 통해 이 작업을 수행할 수 있습니다.
  3. 서비스 호스트를 열고 사용자가 Enter 키를 누를 때까지 기다립니다.

    이 샘플에서는 콘솔 응용 프로그램에서 웹 스타일 서비스를 호스팅하는 방법을 보여 줍니다. IIS 내에서도 이러한 서비스를 호스팅할 수 있습니다. 이 작업을 수행하려면 다음 코드에서처럼 .svc 파일에서 WebServiceHostFactory 클래스를 지정합니다.

    <%ServiceHost 
        language=c#
        Debug="true"
        Service="Microsoft.Samples.Service"
        Factory=System.ServiceModel.Activation.WebServiceHostFactory%>
    

    이 샘플에서는 웹 서비스 호스트를 코드에서 명령적으로 구성합니다. 또한 응용 프로그램 구성 파일에서 웹 서비스 호스트를 구성할 수도 있습니다. 다음 응용 프로그램 구성 파일을 사용하여 위에 나열된 코드와 동일한 구성을 수행할 수 있습니다.

    <configuration>
      <system.serviceModel>
        <services>
          <service
              name="Microsoft.ServiceModel.Samples.BasicWebProgramming.Service"
              behaviorConfiguration="MyServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="https://localhost:8000/"/>
              </baseAddresses>
            </host>
            <endpoint address="" 
                      binding="webHttpBinding"
                      contract="Microsoft.ServiceModel.Samples.BasicWebProgramming.IService" />
    
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyServiceBehavior">
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

    응용 프로그램 구성 파일을 사용하려면 앞의 코드를 약간 수정해야 합니다. 코드에서 기본 주소, 서비스 동작 또는 끝점을 지정할 필요가 없습니다. 다음 예제에서는 이와 같이 수정한 코드를 보여 줍니다.

     using (WebServiceHost host = new WebServiceHost(typeof(Service)))
          {
              host.Open();
              Console.WriteLine("Service is running");
              Console.WriteLine("Press enter to quit...");
              Console.ReadLine();
              host.Close();
    }
    

Internet Explorer에서 GET에 매핑된 서비스 작업을 호출하려면

  1. Internet Explorer를 열고 "https://localhost:8000/EchoWithGet?s=Hello, world!"를 입력한 후 Enter 키를 누릅니다. URL에는 서비스 기본 주소("https://localhost:8000/"), 끝점 상대 주소(""), 호출할 서비스 작업("EchoWithGet") 및 앰퍼샌드(&)로 구분된 명명된 매개 변수의 목록 앞에 있는 물음표가 포함됩니다.

코드에서 서비스 작업을 호출하려면

  1. using 블록 내에서 ChannelFactory 인스턴스를 만듭니다.

  2. ChannelFactory가 호출할 끝점에 WebHttpBehavior를 추가합니다.

  3. 채널을 만들고 서비스를 호출합니다.

  4. WebServiceHost를 닫습니다.

예제

다음은 이 예제에 해당되는 전체 코드 목록입니다.

코드 컴파일

Service.cs를 컴파일할 때 System.ServiceModel.dll 및 System.ServiceModel.Web.dll을 참조합니다.

참고 항목

참조

WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebServiceHost
ChannelFactory
WebHttpBehavior