연습: 설치할 때 다른 웹 서비스로 응용 프로그램 리디렉션

업데이트: 2007년 11월

이 연습에서는 URL 동작 속성, 설치 관리자 클래스 및 웹 설치 프로젝트를 사용하여 다른 웹 서비스에 리디렉션될 수 있는 웹 응용 프로그램을 만드는 방법에 대해 설명합니다. 개발하는 동안에는 로컬에서 웹 서비스를 대상으로 해야 하고 응용 프로그램을 배포할 때에는 프로덕션 버전의 웹 서비스를 사용하려는 경우 이 방법이 유용합니다.

참고:

실제 설정이나 버전에 따라서 화면에 나타나는 대화 상자와 메뉴 명령이 도움말의 설명과 다를 수 있습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

웹 응용 프로그램 프로젝트 만들기

첫 번째 단계로 웹 서비스에 대한 웹 참조가 포함된 ASP.NET 웹 응용 프로그램 프로젝트를 만듭니다.

프로젝트를 만들려면

설치 관리자 클래스 추가

설치 구성 요소라고도 하는 설치 관리자 클래스는 설치하는 동안 사용자 지정 작업으로 호출되는 .NET Framework 클래스입니다. 이 경우 클래스 라이브러리 프로젝트를 솔루션에 추가합니다. 클래스 라이브러리 프로젝트에서 설치 관리자 클래스를 만들고 해당 Install 메서드를 재정의하여 웹 응용 프로그램의 .config 파일을 수정하는 코드를 추가합니다. 설치 관리자 클래스에 대한 자세한 내용은 설치 구성 요소 소개를 참조하십시오.

클래스 라이브러리 프로젝트를 만들려면

  1. 솔루션 탐색기에서 마우스 오른쪽 단추로 솔루션 노드를 클릭한 다음 추가, 새 프로젝트를 차례로 클릭합니다.

  2. 새 프로젝트 추가 대화 상자의 Visual Basic 노드에서 클래스 라이브러리를 선택합니다.

  3. 프로젝트 이름을 InstallerClassLibrary로 지정합니다.

설치 관리자 클래스를 추가 및 구현하려면

  1. 솔루션 탐색기에서 InstallerClassLibrary 프로젝트 노드를 마우스 오른쪽 단추로 클릭한 다음 추가, 클래스를 차례로 클릭합니다.

  2. 새 항목 추가 대화 상자에서 설치 관리자 클래스를 선택하고 이름을 WebServiceInstaller.vb로 변경합니다.

    추가를 클릭하면 프로젝트에 클래스가 추가되고 설치 관리자 클래스의 디자이너가 열립니다.

  3. 디자이너를 두 번 클릭하여 코드 편집기를 엽니다.

  4. WebServiceInstaller.vb에서 설치 관리자 클래스 모듈의 아래쪽(End Class 선언 바로 위)에 다음 코드를 추가합니다. 이 코드는 Install 메서드를 구현합니다.

    Public Overrides Sub Install(ByVal stateSaver As _
      System.Collections.IDictionary)
    
       ' Gets the parameter passed across in the CustomActionData.
       Dim installlog As New System.IO.StreamWriter("Installation.log")
       installlog.AutoFlush = True
       Try
         Dim ProvidedName As String = Me.Context.Parameters.Item("ServerName")
         Dim SvcName As String = Me.Context.Parameters.Item("ServiceName")
    
          installlog.WriteLine("Starting Edit of the config file")
    
          If ProvidedName = "" Or SvcName = "" Then
             Throw New InstallException("No arguments specified")
          End If
    
          ' Uses reflection to find the location of the config file.
          Dim Asm As System.Reflection.Assembly = _
            System.Reflection.Assembly.GetExecutingAssembly
          Dim strConfigLoc As String
          strConfigLoc = Asm.Location
    
          Dim strTemp As String
          strTemp = strConfigLoc
          strTemp = strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) - _
            strTemp.LastIndexOf("\"))
          strTemp = strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) - _
            strTemp.LastIndexOf("\"))
    
          Dim FileInfo As System.IO.FileInfo = New System.IO.FileInfo( _
            strTemp & "\web.config")
    
          installlog.WriteLine("File info: " & strTemp)
    
          If Not FileInfo.Exists Then
             Throw New InstallException("Missing config file")
          End If
    
          ' Loads the config file into the XML DOM.
          Dim XmlDocument As New System.Xml.XmlDocument()
          XmlDocument.Load(FileInfo.FullName)
    
          ' Finds the right node and change it to the new value.
          Dim Node As System.Xml.XmlNode
          Dim FoundIt As Boolean = False
          For Each Node In _
             XmlDocument.Item("configuration").Item("appSettings")
             ' Skips any comments.
             If Node.Name = "add" Then
                If Node.Attributes.GetNamedItem("key").Value = _
                   "servername.service" Then
                   ' Note that "Service1.asmx" should be replaced with the
                   ' actual name of the XML Web service file.
                   Node.Attributes.GetNamedItem("value").Value = "http://" _
                     & ProvidedName & "/" & SvcName & "/Service1.asmx"
                   FoundIt = True
                End If
             End If
          Next Node
    
          If Not FoundIt Then
             Throw New InstallException("Config file did not contain a ServerName section")
          End If
    
          ' Writes out the new config file.
          XmlDocument.Save(FileInfo.FullName)
    
       Finally
          installlog.WriteLine("Ending edit of config file")
          installlog.Close()
       End Try
    
    End Sub
    

    위의 코드에서는 먼저 사용자 지정 작업의 진행 과정을 기록하는 설치 로그 파일을 만듭니다. System.Reflection 네임스페이스는 설치되는 어셈블리 및 이 어셈블리에 연결된 .config 파일을 찾는 데 사용되며, XML 문서 모델은 appSettings 섹션을 찾을 때까지 .config 파일 전체를 반복하는 데 사용됩니다. servername.service 키를 찾으면 이 키에 연결된 값이 전달된 매개 변수를 포함하도록 변경되어 그 결과 새 웹 서비스를 사용하도록 응용 프로그램이 리디렉션됩니다.

  5. 솔루션 탐색기에서 Web.config 파일을 두 번 클릭하여 엽니다.

  6. appSettings 섹션에서 웹 서비스의 키 값을 복사합니다. 키 형식은 servername.service입니다. 여기서 servername은 웹 서비스가 있는 서버이며 service는 웹 서비스의 이름입니다.

  7. 코드 편집기에서 설치 관리자 클래스 모듈을 열고 "servername.service"를 이전 단계에서 복사한 값으로 바꿉니다.

웹 설치 프로젝트 추가

설치 프로젝트는 응용 프로그램의 설치 관리자를 만드는 데 사용됩니다. Windows Installer 기술을 사용하는 설치 프로젝트에는 설치하는 동안 사용자 지정 작업을 실행하거나 설치 사용자 인터페이스를 사용자 지정할 수 있는 기능이 포함되어 있습니다. 설치 프로젝트에 대한 자세한 내용은 응용 프로그램 및 구성 요소 배포를 참조하십시오.

웹 설치 프로젝트를 추가하려면

  1. 솔루션 탐색기에서 마우스 오른쪽 단추로 솔루션 노드를 클릭한 다음 추가, 새 프로젝트를 차례로 클릭합니다.

  2. 새 프로젝트 추가 대화 상자의 프로젝트 형식 창에서 기타 프로젝트 형식 노드를 확장한 다음 설치 및 배포 프로젝트 노드를 선택합니다.

    템플릿 창에서 웹 설치 프로젝트를 선택합니다. 이름 상자에서 프로젝트 이름을 WebAppSetup으로 설정합니다.

    확인을 클릭하면 프로젝트가 솔루션에 추가되고 파일 시스템 편집기가 열립니다.

  3. 속성 창에서 ProductName 속성을 선택한 다음 웹 응용 프로그램의 이름을 설정합니다.

  4. 파일 시스템 편집기에서 웹 응용 프로그램 폴더를 선택합니다.

  5. 작업 메뉴에서 추가를 가리킨 다음 프로젝트 출력을 클릭합니다.

  6. 프로젝트 출력 그룹 추가 대화 상자의 프로젝트 드롭다운 목록에서 InstallerClassLibrary를 선택한 다음 기본 출력을 선택합니다.

    확인을 클릭하면 InstallerClassLibrary의 기본 출력이 웹 설치 프로젝트에 추가됩니다.

사용자 지정 작업 추가

사용자 지정 작업은 설치 중에 처리할 수 없는 작업을 수행하기 위해 설치 종료 시 코드를 실행하는 데 사용됩니다. 사용자 지정 작업 코드는 .dll, .exe, 스크립트 또는 어셈블리 파일에 포함할 수 있습니다. 사용자 지정 작업에 대한 자세한 내용은 배포 시 사용자 지정 작업 관리를 참조하십시오.

설치 관리자 클래스를 사용자 지정 작업으로 추가하려면

  1. 솔루션 탐색기에서 WebAppSetup 프로젝트를 선택합니다.

  2. 보기 메뉴에서 편집기, 사용자 지정 작업을 차례로 클릭합니다.

    사용자 지정 작업 편집기가 열립니다.

  3. 사용자 지정 작업 편집기에서 설치 노드를 선택합니다.

  4. 작업 메뉴에서 사용자 지정 작업 추가를 선택합니다.

  5. 웹 응용 프로그램 폴더를 두 번 클릭한 다음 InstallerClassLibrary의 기본 출력(활성)을 선택합니다.

  6. 속성 창에서 InstallerClass 속성이 True로 설정되어 있는지 확인합니다.

  7. CustomActionData 속성을 선택하고 /ServerName=[EDITA1] /ServiceName=[EDITA2]를 입력합니다.

    CustomActionData 속성은 사용자 지정 작업에 전달되는 두 개의 매개 변수(공백으로 구분)를 제공합니다.

대화 상자 추가

사용자 인터페이스 대화 상자는 설치 중에 사용자로부터 정보를 수집하기 위해 표시됩니다. 사용자 인터페이스 대화 상자에 대한 자세한 내용은 배포 시 사용자 인터페이스 관리를 참조하십시오.

사용자 지정 사용자 인터페이스 대화 상자를 추가하려면

  1. 솔루션 탐색기에서 설치 프로젝트를 선택합니다.

  2. 보기 메뉴에서 편집기를 가리킨 다음 사용자 인터페이스를 클릭합니다.

  3. 사용자 인터페이스 편집기의 설치 아래에서 시작 노드를 선택합니다.

  4. 작업 메뉴에서 대화 상자 추가를 선택합니다.

  5. 대화 상자 추가 대화 상자에서 입력란 (A) 대화 상자를 선택하고 확인을 클릭합니다.

  6. 작업 메뉴에서 위로 이동을 선택하고 입력란 (A) 대화 상자가 설치 위치 대화 상자 위에 올 때까지 반복합니다.

  7. 속성 창에서 다음 속성을 설정합니다.

    속성

    BannerText

    서버 이름과 서비스 이름을 입력합니다.

    Edit1Label

    서버 이름:

    Edit1Value

    Localhost

    참고:

    이 값은 기본 서버를 지정합니다. 여기에 사용자의 기본 서버 이름을 입력할 수 있습니다.

    Edit2Label

    서비스 이름:

    Edit2Value

    <서비스의 이름>

    Edit3Visible

    False

    Edit4Visible

    False

    Edit1Property 속성은 "EDITA1"로 설정되고 있고 Edit2Property 속성은 "EDITA2"로 설정되어 있습니다. 이 값은 사용자 지정 작업 편집기에서 CustomActionData 속성에 입력한 값과 같습니다. 설치하는 동안 사용자가 이러한 edit 컨트롤에 텍스트를 입력하면 CustomActionData 속성을 통해 자동으로 값이 전달됩니다.

응용 프로그램 빌드 및 배포

마지막 단계에서는 설치 프로젝트를 빌드하여 설치 관리자를 만든 다음 대상 서버에 응용 프로그램을 설치합니다.

설치 프로젝트를 빌드하려면

  • 빌드 메뉴에서 Projectname 빌드를 선택합니다. 여기서 Projectname은 설치 프로젝트의 이름입니다.

개발 컴퓨터에서 응용 프로그램을 웹 서버에 배포하려면

  1. 솔루션 탐색기에서 설치 프로젝트를 선택합니다.

  2. 프로젝트 메뉴에서 설치를 클릭합니다.

다른 컴퓨터에서 응용 프로그램을 웹 서버에 배포하려면

  1. Windows 탐색기에서 프로젝트 디렉터리로 이동한 다음 빌드된 설치 관리자를 찾습니다. 기본 경로는 \documents and settings\yourloginname\My Documents\Visual Studio Projects\setupprojectname\project configuration\productname.msi입니다. 기본 project configuration은 Debug입니다.

  2. 디렉터리에 있는 .msi 파일 및 다른 모든 파일과 하위 디렉터리를 웹 서버 컴퓨터에 복사합니다.

  3. 웹 서버 컴퓨터에서 Setup.exe 파일을 두 번 클릭하여 설치 관리자를 실행합니다.

참고 항목

개념

설치 구성 요소 소개

기타 리소스

응용 프로그램 및 구성 요소 배포

배포 시 사용자 지정 작업 관리

배포 시 사용자 인터페이스 관리