본문 바로가기
개발언어/ASP.NET

DLL과 웹서비스

by 엔돌슨 2007. 12. 15.
반응형

DLL과 웹서비스

 

 여기서는 간단한 계산기를 만들고, 계산 기능(사칙연산)을 수행하는 DLL을 만들어 그 DLL을 사용하여 변경해 본 후, 웹서비스로 만들어 원거리에서 그 계산 기능을 호출할 수 있도록 구성할 것이다. DLL 만드는 방법과 웹서비스 만드는 방법이 얼마나 간단한지 경험할 수 있는 좋은 기회가 될 것이다.

   계산기는 다음과 같이 제작하였다.

   이 프로그램은 이제 쉽게 만들 수 있으리라 생각되므로 루틴을 하나하나 설명하지는 않을 것이다.

   이 루틴중 = 버튼을 선택했을 때 호출되는 Method를 보면 다음과 같다.

        private void buttonEqual_Click(object sender, System.EventArgs e)

        {

            dInput2 = double.Parse(this.textBox1.Text);

            switch(cCalc)

            {

                case '+':

                    dResult = dInput1 + dInput2;

                    break;

 

                case '-':

                    dResult = dInput1 - dInput2;

                    break;

 

                case '*':

                    dResult = dInput1 * dInput2;

                    break;

 

                case '/':

                    dResult = dInput1 / dInput2;

                    break;

            }

            bCalculated = true;

            this.textBox1.Text = dResult.ToString();

        }

   이중 사칙연산을 하는 부분을 DLL로 만들고 사용하도록 수정해 보겠다.

  DLL을 제작하기 위해 프로젝트를 하나 추가해 보자. 솔루션 탐색기의 솔루션(Tree중 최상위 항목)에서 마우스 오른쪽 버튼을 선택하여 생성된 팝업 메뉴 추가의 부메뉴 새프로젝트를 선택하면 다음과 같은 대화 상자가 생성된다.

   클래스 라이브러리를 선택하고 이름에 ClassLibrary1을 CalcDll로 변경한 후 확인을 선택하면 다음과 같이 CalcDll 프로젝트가 하나 추가된다.

  솔루션 탐색기에서 Class1.cs를 CalcDll.cs로 수정하고, Source에서 Class1을 Calc로 수정한 후 다음과 같은 Method를 추가한다.

        public double Add(double dValue1, double dValue2)

        {

            return dValue1 + dValue2;

        }

 

        public double Subtract(double dValue1, double dValue2)

        {

            return dValue1 - dValue2;

        }

 

        public double Multiplex(double dValue1, double dValue2)

        {

            return dValue1 * dValue2;

        }

 

        public double Divide(double dValue1, double dValue2)

        {

            return dValue1 / dValue2;

        }

 

  빌드를 수행하면 CalcDll.dll이 생성된다.

 

   이제 CalcDll.dll을 사용해 보자.

  CalcDll.dll을 사용할 Calculator 프로젝트의 참조에서 마우스 오른쪽 버튼을 선택하여 생성된 팝업 메뉴에서 참조 추가를 선택하면 다음과 같은 대화 상자가 생성된다.

   찾아보기 버튼을 선택하여 CalcDll.dll을 선택해도 되나, 같은 솔루션에 들어 있는 파일은 프로젝트 탭을 선택하여 선택하면 된다. 다음은 프로젝트 탭을 선택한 모양이다.

   마우스로 CalcDll를 더블클릭하거나 선택 버튼을 실행 한 후 확인을 선택하면 참조가 된다.

   using CalcDll;을 선언하고 앞에서 설명한 buttonEqual_Click Method를 다음과 같이 수정하면 CalcDll.dll을 사용하여 구성한 것이 된다.


        private void buttonEqual_Click(object sender, System.EventArgs e)

        {

            dInput2 = double.Parse(this.textBox1.Text);

            Calc calc = new Calc();

            switch(cCalc)

            {

                case '+':

                    dResult = calc.Add(dInput1, dInput2);

                    break;

 

                case '-':

                    dResult = calc.Subtract(dInput1, dInput2);

                    break;

 

                case '*':

                    dResult = calc.Multiplex(dInput1, dInput2);

                    break;

 

                case '/':

                    dResult = calc.Divide(dInput1, dInput2);

                    break;

            }

            bCalculated = true;

            this.textBox1.Text = dResult.ToString();

        }


  이제 웹서비스로 만들어야 한다. 웹서비스를 만들기 전에 웹서비스의 개념을 먼저 알아 보자. 웹서비스는 .NET 웹서비스, .NET XML 웹서비스, ASP.NET 웹서비스, ASP.NET XML 웹서비스등으로 다양하게 불리워 진다.

  인터넷을 통한 원거리 데이터 통신 방식에는 여러 가지 방법이 있다. 그 중 가장 많이 사용했던 방식이 TCP를 직접 구성하여 통신하는 방식이었다. 이 방식은 많이 사용되다 이제 점점 줄어 들어 잘 사용되고 있지 않다. 이유는 방화벽 때문이다. Windows XP이상에 방화벽이 설치되어 기본적으로 HTTP 통신을 위한 80번 포트만 열어 놓고 있다. 이 경우 특별히 설정을 하지 않는한 80번 외의 포트로는 통신을 수행할 수 없다. 따라서 S/W들은 80번 포트로 통신하는 방식이 필요하게 되었다.

   그러나 TCP를 직접 구성하여 통신하는 방식에서는 80번 포트를 이미 HTTP 통신을 위해 IIS 서버가 할당 받아 사용하고 있기 때문에 사용할 수 없다. 이를 해결하기 위해 고안된 방식이 XML 웹서비스이다.

  이 방식은 통신하고자 하는 데이터를 XML이라는 표준 문서 형태로 작성하여 IIS 서버에게 전송해 달라고 하면, 수신처에서는 그 문서를 받아 데이터를 해석하여 취득한 후 사용하는 방식이다.

   즉 데이터 형태는 XML을 사용하고 데이터 전송은 직접 TCP를 구성하여 사용하는 것이 아니라 IIS 서버를 통해 전송을하는 방식이다.

  이 이론하에서 XML 웹서비스를 구성하고자 한다면 XML 문서 양식, IIS 서버에 전송을 요청하는 방식 등 알아야 할 것이 아주 많을 듯 하다. 그러나 C#에서는 이런 부분을 전혀 몰라도 된다. 이제 그 구성 방식을 살펴 보도록 하겠다.

  XML 웹서비스를 구성하기 위해 프로젝트를 하나 추가 해보자. 솔루션 탐색기의 솔루션(Tree중 최상위 항목)에서 마우스 오른쪽 버튼을 선택하여 생성된 팝업 메뉴 추가의 부메뉴 새프로젝트를 선택하면 다음과 같은 대화 상자가 생성된다.

ASP.NET 웹 서비스를 선택하고 위치의 WebService1을 CalcWebService로 수정한 후 확인을 선택하면 다음과 같이 CalcWebService 프로젝트가 추가 된다.

Service1.asmx를 CalcWebService.asmx로 변경하고, 해당 파일에서 마우스 오른쪽 버튼을 선택하여 생성된 팝업 메뉴에서 코드 보기를 선택하여 열린 코드에서 Service1을 Calc로  수정한 후 다음과 같은 Method를 추가한다.

        [WebMethod]

        public double Add(double dValue1, double dValue2)

        {

            return dValue1 + dValue2;

        }

 

        [WebMethod]

        public double Subtract(double dValue1, double dValue2)

        {

            return dValue1 - dValue2;

        }

 

        [WebMethod]

        public double Multiplex(double dValue1, double dValue2)

        {

            return dValue1 * dValue2;

        }

 

        [WebMethod]

        public double Divide(double dValue1, double dValue2)

        {

            return dValue1 / dValue2;

        }

 

  위의 내용을 보면 DLL 제작과 거의 같고 다른점이라면 [WebMethod]라는 Attribute만 추가된 것을 볼 수 있다. 이제 빌드를 수행하면 CalcWebService.dll이 생성된다.

   XML 웹서비스 만드는 것이 DLL 만드는 것과 별로 다르지 않다는 것을 알 수 있다.

 

  이제 XML 웹서비스를 사용해 보도록 하자.

  CalcWebService.dll을 사용할 Calculator 프로젝트의 참조에서 마우스 오른쪽 버튼을 선택하여 생성된 팝업 메뉴에서 웹 참조 추가를 선택하면 다음과 같은 대화 상자가 생성된다.

  로컬 컴퓨터의 웹 서비스를 선택하면 대화 상자는 다음과 같이 바뀐다.

  CalcWebService를 마우스로 클릭하면 대화 상자는 다음과 같이 바뀐다.

  웹 참조 이름을 WebService(using 할 때 사용하는 이름 중 일부로 그대로 두어도 상관 없다.)로 바꾸고 참조 추가 버튼을 선택하면 참조가 된다.

   이제 using을 사용하여 namespace를 등록하고 Calc 클래스를 사용하면 된다. namespace 명은 일반 DLL과는 다르게 웹서비스를 사용하는 어플리케이션 이름(Calculator) . 웹 참조 이름(WebService, 변경하지 않았으면 localhost)을 사용한다.

   즉 using Calculator.Webservice;를 선언하고, 나머지는 DLL 사용할 때 와 같은 Source를 사용하면 동작을 한다.

   이제 실행 하여 처음 = 버튼을 누를 때 속도가 조금 느리고, 그 이후 부터는 똑같이 동작한다는 것을 알 수 있다.

  앞에서 설명한 예제는 설명의 편의를 위해 간단한 예제를 사용했으므로, 이걸 어디에다 써야 할 지 크게 와닿지 않을 수도 있다. 이 기능은 실행파일이 실행되는 PC의 자원이 아닌 다른 PC(서버 PC)의 자원을 이용하여 서버에서 원하는 기능을 수행하고, 그 결과를 실행되는 PC로 전송하는 기능이 필요할 경우 아주 간단히 구현할 수 있다.

  필자가 회사에서 하고 있는 일을 예로 설명해 보겠다. 필자는 HMI(Human Machine Interface) 소프트웨어를 개발하고 있다. 이 프로그램은 다양한 Controller와 통신하여 현장의 기계장치들을 제어 및 감시 하는 프로그램이다. 이 프로그램을 Controller와 연결되어 있지 않은 원거리 PC에서 운영을 하고자 할 경우 현장에 설치된 서버와 통신을 통해 데이터를 주고 받아야 한다. 이 경우 감시하고자 하는 기계의 리스트와 그에 해당하는 값의 리스트(ref로 넘겨줌)를 인자로 넘겨 서버에서 값을 채워 주면, 클라이언트에서는 그 값을 화면상에 표시할 수 있도록 구성하면 간단히 구현이 된다.

   현재 웹서비스를 사용하기는 하지만 같은 PC에서 동작하고 있다. 이제 다른 PC에서 동작하도록 하는 부분 설정을 알아보자.

   

   솔루션 탐색기에서 WebService를 선택하고 속성을 보면 웹참조 URL이 localhost로 설정되어 있는 것을 알 수 있다. 다른 PC에서 동작하기 위해서는 localhost 대신 서버의 IP를 입력하면 된다.

   IP를 입력하고 컴파일 한 후 실행하면 다음과 같이 화면에 나타난다.

   

 실행 될 때 마다 이렇게 화면에 나타나면 이 프로그램을 사용하는 사람은 없게 될 것이다. 여러분들은 이 부분을 해결하기 위해 아래의 내용을 사용자들에게 설명서로 제공하여 보안 설정을 하도록 해야 할 것이다.

   제어판을 실행하면 다음과 같이 화면에 나타난다.

  관리 도구를 선택하면 화면은 다음과 같이 바뀐다.

   

   Microsoft .NET Framework 1.1 구성 또는  Microsoft .NET Framework 1.1 Configuration을 선택하여 왼쪽 트리를 열심히 펼치면(내컴퓨터 - 런타임 보안 정책 - 컴퓨터 - All_Code) 다음과 같이 화면에 나타난다.

   코드 그룹 속성 편집을 선택하여 권한 집합 탭을 선택하면 다음과 같이 화면에 나타난다.

   Nothing을 FullTrust로 선택하면 보안 경고는 없어 지게 될 것이다.


다운로드