다음을 통해 공유


ASP.NET 웹 서비스와의 상호 운용성

ASP.NET 웹 서비스와 WCF(Windows Communication Foundation) 웹 서비스 간의 상호 운용성은 두 기술을 사용하여 구현된 서비스가 WS-I Basic Profile 1.1 사양을 준수하도록 함으로써 실현할 수 있습니다. WS-I Basic Profile 1.1을 준수하는 ASP.NET 웹 서비스는 WCF 시스템 제공 바인딩 BasicHttpBinding을 사용하여 WCF 클라이언트와 상호 운용 가능합니다.

다음 예제 코드에 표시된 것처럼 WebServiceWebMethodAttribute 특성을 클래스가 아니라 인터페이스에 추가하고 클래스를 기록하는 ASP.NET 2.0 옵션을 사용하여 인터페이스를 구현합니다.

[WebService]  
public interface IEcho  
{  
    [WebMethod]  
    string Echo(string input);  
}  
  
public class Service : IEcho  
{  
  
   public string Echo(string input)  
   {  
        return input;  
    }  
}  

WebService 특성을 가진 인터페이스는 서비스에 의해 수행되는 작업에 대한 계약을 구성하며, 같은 계약을 다른 방식으로 구현하는 다양한 클래스에서 이 서비스를 다시 사용할 수 있으므로 이 옵션을 사용하는 것이 좋습니다.

SoapDocumentServiceAttribute HTTP 헤더가 아닌 SOAP 메시지 본문 요소의 정규화된 이름을 기반으로 메서드로 메시지를 라우팅하려면 SOAPAction 특성을 사용하지 마십시오. WCF는 라우팅 메시지에 대해 SOAPAction HTTP 헤더를 사용합니다.

XmlSerializer에서 기본적으로 형식을 serialize하는 XML은 해당 XML에 대한 네임스페이스가 명시적으로 정의되어 있는 경우 DataContractSerializer에서 형식을 serialize하는 XML과 의미상 동일합니다. WCF를 채택하기 위해 ASP.NET 웹 서비스와 함께 사용하도록 데이터 형식을 정의하려면 다음을 수행합니다.

  • XML 스키마가 아닌 .NET Framework 클래스를 사용하여 형식을 정의합니다.

  • 클래스에는 SerializableAttributeXmlRootAttribute만 추가하며, 형식에 대한 네임스페이스를 명시적으로 정의하려면 후자를 사용합니다. .NET Framework 클래스를 XML로 변환하는 방법을 제어하려면 System.Xml.Serialization 네임스페이스로부터 특성을 추가하지 마십시오.

  • 이 방법을 채택하면 전송을 위해 클래스가 serialize되도록 XML을 크게 변경하지 않고 나중에 DataContractAttributeDataMemberAttribute를 추가하여 .NET 클래스를 데이터 계약으로 만들 수 있습니다. ASP.NET 웹 서비스에 의해 메시지에서 사용된 형식은 WCF 애플리케이션에 의해 데이터 계약으로 처리될 수 있습니다. 이 경우 WCF 애플리케이션의 성능 향상을 비롯한 여러 가지 이점을 얻을 수 있습니다.

IIS(인터넷 정보 서비스)에서 제공하는 인증 옵션은 사용하지 마십시오. WCF 클라이언트에서는 이를 지원하지 않습니다. 서비스 보안이 필요한 경우 WCF에서 제공하는 옵션을 사용합니다. 이 옵션은 강력하며 표준 프로토콜을 기반으로 하기 때문입니다.

ServiceModel HttpModule 로드에 의한 성능 영향

.NET Framework 3.0의 경우 WCF HttpModule은 모든 ASP.NET 애플리케이션에서 WCF를 사용할 수 있도록 루트 Web.config 파일에 설치되어 있습니다. 이는 성능에 영향을 줄 수 있기 때문에 다음 예제에서처럼 Web.config 파일에 대해 ServiceModel을 제거할 수 있습니다.

<httpModules>  
    <remove name="ServiceModel" />  
</httpModules>

참고 항목