.NET에서 최초의 웹 서비스 개발 계약


정보 시스템 통합에 대한 작업은 종종 이전에 정의된 계약에 따라 웹 서비스를 구현하는 작업과 함께 제공됩니다. 이는 들어오는 데이터에 대해 예상되는 수신기를 구현해야 하는 디자인 우선 접근 방식 또는 파트너 상호 운용성 프로젝트에서 발생할 수 있습니다.

기존 WSDL이 있는 XML 웹 서비스를 개발하려면 Microsoft Visual Studio와 함께 제공되는 도구를 사용할 수 있습니다.

ASMX 프로젝트를 사용합니다. 버전 5 이상에서는 더 이상 .NET의 일부가 아니어서 지원이 걱정된다면 this guy's opinion을 읽어 보시기 바랍니다.

To be accurate, both WCF and ASMX will be supported after .NET 5 is released. They will be included in .NET 4.8 and that will be supported as a component of the OS that they are installed on.



물론 Soap Core 을 사용할 수 있지만 기존 계약으로 작업하는 것은 매우 수동적인 솔루션이며 부주의로 스키마를 변경할 위험이 있습니다.

본론으로 들어가 기존의 단순하고 무료인 공용 웹 서비스에 대한 빠르고 쉬운 개념 증명 단계를 살펴보겠습니다.

www.learnwebservices.com/services/hello?WSDL

로컬 컴퓨터의 폴더에 WSDL 파일을 다운로드합니다.
Visual Studio가 설치되어 있어야 합니다. "VS 2019용 개발자 명령 프롬프트"열기:


명령 프롬프트에서 WSDL 파일을 저장한 폴더로 이동합니다.
WSDL 명령을 실행합니다.

wsdl /namespace:My.Contract.First /serverInterface <file.wsdl>


여기서 은 계약을 저장할 때 지정한 이름입니다. 적절한 네임스페이스도 선택하십시오. 이 명령을 성공적으로 완료하면 지정된 웹 서비스에서 사용할 수 있는 메서드에 해당하는 인터페이스 정의가 있어야 합니다.

// 
// This source code was auto-generated by wsdl, Version=4.8.3928.0.
// 
namespace My.Contract.First {
    using System;
    using System.Web.Services;
    using System.Diagnostics;
    using System.Web.Services.Protocols;
    using System.Xml.Serialization;
    using System.ComponentModel;


    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.8.3928.0")]
    [System.Web.Services.WebServiceBindingAttribute(Name="HelloEndpointServiceSoapBinding", Namespace="http://learnwebservices.com/services/hello")]
    public interface IHelloEndpointServiceSoapBinding {

        /// <remarks/>
        [System.Web.Services.WebMethodAttribute()]
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="http://learnwebservices.com/services/hello", ResponseNamespace="http://learnwebservices.com/services/hello", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
        [return: System.Xml.Serialization.XmlElementAttribute("HelloResponse")]
        helloResponse SayHello(helloRequest HelloRequest);
    }

    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.8.3928.0")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://learnwebservices.com/services/hello")]
    public partial class helloRequest {

        private string nameField;

        /// <remarks/>
        public string Name {
            get {
                return this.nameField;
            }
            set {
                this.nameField = value;
            }
        }
    }

    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.8.3928.0")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://learnwebservices.com/services/hello")]
    public partial class helloResponse {

        private string messageField;

        /// <remarks/>
        public string Message {
            get {
                return this.messageField;
            }
            set {
                this.messageField = value;
            }
        }
    }
}


Visual Studio를 열고 빈 ASP.NET 웹 애플리케이션(.NET Framework)을 새로 만듭니다.



프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "추가 > 기존 항목"을 클릭합니다. .CS 인터페이스 파일을 찾아 "추가"를 클릭합니다.



이제 새 ASMX 항목을 추가합니다.



ASMX에서 WSDL 도구로 생성된 인터페이스를 구현합니다.

using System.Web.Services;

namespace My.Contract.First
{
    /// <summary>
    /// Summary description for HelloService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class HelloService : System.Web.Services.WebService, IHelloEndpointServiceSoapBinding
    {

        [WebMethod]
        public helloResponse SayHello(helloRequest HelloRequest)
        {
            helloResponse resp = new helloResponse();
            resp.Message = "Hi there " + HelloRequest.Name;
            return resp;
        }
    }
}


빌드 및 실행. 기존 WSDL 계약을 사용하여 스텁 웹 서비스를 개발하기 위한 것입니다.

SOAP/XML 웹 서비스는 단순성이 부족하고 보장된 교차 플랫폼 통합에 대한 약속을 이행하지 못하기 때문에 점차 REST API에 기반을 잃고 있습니다. 그러나 대부분의 엔터프라이즈 애플리케이션은 형식 XML 스키마 정의, 트랜잭션성 및 보안과 같은 향상된 프로토콜 기능을 위해 여전히 이를 사용합니다.

따라서 새로운 것을 구축하고 있다면 REST를 사용해 보십시오. 이전에 개발된 플랫폼을 유지하는 경우 기존 도구를 사용하는 것이 좋습니다.

원글here .

Background photo created by natanaelginting - www.freepik.com

좋은 웹페이지 즐겨찾기