login register Sysop! about ME  
qrcode
    최초 작성일 :    2007년 12월 26일
  최종 수정일 :    2008년 02월 27일
  작성자 :    songgun
  편집자 :    songgun(송 원석)
  읽음수 :    22,210

강좌 목록으로 돌아가기

필자의 잡담~

(없음)
IIS 7.0 인스퍼레이션 - 16
    (Managing Applications and Application Pools on IIS7 with WMI 번역 및 주해)


다음은 본 번역 문서의 권한에 관한 제반 사항입니다.
  • 본 번역 문서에 대한 모든 저작권은 마이크로소프트사에 있으며, 단순히 IIS 7.0 을 널리 알리고자 하는 개인적인 취지에 의해 번역되어 제공되는 문서입니다.
  • 마이크로소프트사의 요청이 있는 경우 언제라도 게시가 중단될 수 있습니다.
  • 본문에서 제공하는 번역에는 오역이 포함되어 있을 수 있으며, 주해의 내용도 개인적으로 파악한 것으로 마이크로소프트사는 이 내용에 대해 일체의 보장을 하지 않습니다.
  • 본문의 원문은 IIS 개발팀이 제공하는 Managing Applications and Application Pools on IIS7 with WMI 입니다.
서론

간단한 WMI 스크립트를 사용하면 비교적 쉽게 IIS 7.0 의 응용 프로그램과 응용 프로그램 풀을 관리할 수 있습니다. 본문에서는 단지 몇 줄의 VBScript 코드만을 사용하여 다음과 같은 작업들을 수행하는 방법을 살펴보려고 합니다.:

  • 응용 프로그램을 생성하고 열거하는 방법
  • 응용 프로그램 풀을 생성하고, 구성하고, 삭제하는 방법
  • 응용 프로그램 풀을 시작하고, 중지하고, 재생하는 방법
  • 응용 프로그램 풀의 상태를 조회하는 방법
  • 서버상에 존재하는 모든 응용 프로그램 풀의 목록을 얻는 방법

첫 번째 단계

  • IIS 설치 및 스크립팅 활성화 *
    • 만약, 윈도우 비스타를 사용중이라면, 제어판에서 "프로그램 및 기능" 을 열고, "Windows 기능 사용/사용 안 함" 을 실행합니다. 그리고, "웹 관리 도구" 하위의 "IIS 관리 스크립트 및 도구" 항목을 선택하여 스크립팅을 활성화시킵니다.
    • 만약, 롱혼 서버를 사용중이라면, 서버 관리자를 실행합니다. 그리고, Add Roles Wizard 를 사용하여 IIS 웹 서버를 설치합니다. 설치 과정 중, Select Role Services 페이지에서 Management Tools 하위의 "IIS Management Scripts and Tools" 항목을 선택합니다.
  • 관리자 권한으로 명령 프롬프트를 실행합니다. 일단 명령 프롬프트가 관리자 권한으로 실행되면, 이 명령 프롬프트에서 실행되는 모든 응용 프로그램들이 관리자 권한으로 실행됩니다. 또한, 스크립트 파일을 .VBS 확장자를 가진 텍스트 파일 형식으로 저장하십시오. 이와 같은 스크립트 파일들은 명령 프롬프트상에서 "cscript.exe <scriptname>.vbs" 형식의 명령을 입력하여 실행할 수 있습니다.
  • 본문의 내용을 시작하기 전에, 먼저 System32\inetsrv\config\applicationhost.config 파일의 백업본을 만들어 두십시오. 이 백업본 파일을 다시 덮어 쓰는 것만으로도 IIS 를 기존 상태로 복구할 수 있습니다. **
* 기본적으로 본문의 원문은 2007 년 4 월 경에 비스타와 2008 베타 3 를 기준으로 작성된 문서이다. 그러나, 번역문은 가장 최신 버전인 RC1 에서 거의 대부분의 테스트를 마친 결과를 반영한 것이다. 결과만 얘기한다면 사소한 몇 가지를 제외하고는 큰 변화는 존재하지 않는다.
** 민망하긴 하지만, 이것이 진실이다. WMI 와 관련된 이전의 두 번역 문서에 설명했던 APPCMD 명령어를 사용한 백업과 복구는 본문을 살펴보는데 있어, 그다지 큰 의미가 없다. 단지 파일을 복사해두었다가 다시 덮어쓰기만 하면 복구가 되는 것이다. 그러나, 필자의 입장에서는 직접 작성한 문서가 아닌데다가 번역한 문서의 내용을 마음대로 변경할 수는 없었고, 배치 파일 등을 작성하는 경우에는 제법 쓸모있는 명령어 구문이라고 판단되어 그대로 번역을 했다.


응용 프로그램을 생성하고 열거하는 방법

WMI 스크립팅을 이용하면 크게 어렵지 않게 IIS 7.0 응용 프로그램을 생성하거나 열거할 수 있습니다.

응용 프로그램 생성

응용 프로그램을 생성하려면, IIS 7.0 에서 제공하는 새로운 응용 프로그램 생성 메서드를 사용해야 합니다. 이 메서드는 정적 메서드이며, 문자열 형식인 ApplicationPath 와 SiteName 이라는 두 개의 인자를 필수로 요구합니다. ApplicationPath 인자에는 생성하려는 응용 프로그램의 가상 경로를 지정하고, SiteName 인자에는 응용 프로그램이 생성될 웹 사이트의 이름을 지정합니다. 세 번째 인자인 PhysicalPath 는 옵션으로, 디스크상의 응용 프로그램 경로를 지정합니다.

이 두 개의 인자, 즉 ApplicationPath 인자와 SiteName 인자는 키 속성이며 일단 응용 프로그램이 생성된 뒤에는 변경이 불가능합니다. (사용자 인터페이스에서 ApplicationPath 는 "가상 경로" 라는 이름으로 나타납니다.)

다음 스크립트는 기본 웹 사이트에 "NewApp" 라는 이름의 새로운 응용 프로그램을 생성합니다. Application 클래스 정의를 통해서 Create 메서드를 호출하는 방식을 자세히 살펴보시기 바랍니다.

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")


' 새로운 응용 프로그램을 위한 Path 인자, SiteName 인자, PhysicalPath 인자를 정의합니다.
strApplicationPath = "/NewApp"
strSiteName = "Default Web Site"
strPhysicalPath = "D:\inetpub\NewApp"

' 새로운 응용 프로그램을 생성합니다.
oWebAdmin.Get("Application").Create strApplicationPath, strSiteName, strPhysicalPath
반드시 ApplicationPath 인자와 SiteName 인자를 지정해야만 응용 프로그램이 정상적으로 생성된다는 점을 주의하시기 바랍니다. 그리고, 접한 상황에 따라서는 PhysicalPath 인자를 지정해야만 하는 경우도 있을 텐데, 만약 PhysicalPath 인자에 실제로 존재하지 않는 디렉터리를 지정했다면, 자동으로 해당 디렉터리가 생성되지는 않습니다. 그렇지만, 스크립트는 아무런 오류 메시지도 발생하지 않고 실행되며, 실제로도 IIS 관리자에는 새로운 응용 프로그램 노드가 나타나게 됩니다. 그러나, 막상 새로운 응용 프로그램 노드를 열기 위해서 마우스로 더블 클릭해보면, "'<path>' 경로의 일부를 찾을 수 없습니다." 라는 오류가 발생할 것입니다. *

응용 프로그램 열거

일단, 새로운 응용 프로그램을 생성했다면, WMI 를 사용하여 손쉽게 이 응용 프로그램의 속성들을 출력할 수 있습니다.

다음의 VBScript 는 서버에 존재하는 각각의 응용 프로그램에 대한 사이트명, 응용 프로그램 경로, 응용 프로그램 풀, 그리고 활성화된 프로토콜들을 보여줍니다. 이 스크립트에서는 WMI 의 InstancesOf 메서드를 사용하여 전체 응용 프로그램 목록을 조회하고, 반복하여 속성값을 출력합니다.

' WMI WebAdministration 네임스페이스에 연결합니다.

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

' InstancesOf 메서드를 사용하여 응용 프로그램 목록을 조회합니다.
Set oApps = oWebAdmin.InstancesOf("Application")

' 응용 프로그램에 대한 반복처리를 수행합니다.
For Each oApp In oApps
    WScript.Echo "  Web site/Application: " & oApp.SiteName & oApp.Path
    WScript.Echo "      Application Pool: " & oApp.ApplicationPool
    WScript.Echo "  Enabled protocol(s): " & oApp.EnabledProtocols
    WScript.Echo
Next
그러면, 이번에는 웹 응용 프로그램을 호스트해주는 응용 프로그램 풀을 생성하고, 구성하고, 관리하는 방법을 살펴보겠습니다.

* 비스타 SP 1 RTM 상에서 직접 테스트를 해보니 다음과 같은 오류가 발생하였다.

그리고, 2008 RC1 상에서 테스트를 해보니 이번에는 다음과 같은 오류가 발생하였다.


응용 프로그램 풀을 생성하고, 구성하는 방법

이 단락에서는 WMI 스크립트를 사용하여 응용 프로그램 풀 관련 작업을 처리하기 위한, 기본적이고 중요한 내용들을 살펴봅니다. 응용 프로그램 풀은 하나 이상의 응용 프로그램을 하나 이상의 작업자 프로세스와 연결해주는 역할을 합니다. 응용 프로그램 풀은 각각의 응용 프로그램들을 서로 격리해주며, 결과적으로 이와 같은 격리는 보안성과 신뢰성을 높여줍니다.

응용 프로그램 풀 생성

응용 프로그램 풀을 생성하려면, IIS 7.0 ApplicationPool 클래스의 Create 메서드를 사용합니다. 이 정적 메서드에는 두 개의 인자가 존재하는데, 그 첫 번째는 AppPoolName 인자로, 문자열 형식의 필수적인 인자이며 새로운 응용 프로그램 풀의 이름을 지정하며, 두 번째는 AutoStart 인자로, 불린 형식의 옵션 인자입니다.

그 중, AutoStart 인자의 기본값은 true 며, 여러분들이 생성한 응용 프로그램 풀이 생성된 직후나 IIS 가 시작된 직후에 자동적으로 실행될지 여부를 지정합니다. 만약 AutoStart 인자를 false 로 지정한다면, 해당 응용 프로그램 풀은 수작업으로 실행시켜야만 합니다. 그러나, 응용 프로그램 풀이 시작되기 전에 해당 응용 프로그램 풀에 할당된 응용 프로그램을 구성하거나 콘텐츠를 수정하기 원하는 경우에는, 자동 시작을 비활성화하는 것이 매우 유용할 것입니다.

다음의 샘플 코드에서는 단 두 줄의 코드를 사용하여 "NewAppPool" 이라는 이름의 응용 프로그램을 생성합니다. 여기에서 Create 메서드가 호출되는 방식, 즉 ApplicationPool 의 인스턴스가 아닌 클래스 정의를 사용하여 호출된다는 점을 주의 깊게 살펴보시기 바랍니다. *:

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

oWebAdmin.Get("ApplicationPool").Create("NewAppPool")
대화식으로 응용 프로그램 풀을 생성하는 방법

몇 줄의 코드를 더 추가하면, 입력 대화 상자를 통해 대화식으로 응용 프로그램 풀을 생성하는 유용한 스크립트를 작성할 수도 있습니다.

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")


strNewAppPoolName = InputBox("Enter the name for the new application pool.")

If strNewAppPoolName <> "" Then
    oWebAdmin.Get("ApplicationPool").Create(strNewAppPoolName)
End If
응용 프로그램을 응용 프로그램 풀에 할당하기

응용 프로그램 풀을 생성했으므로, 응용 프로그램을 응용 프로그램 풀에 할당해보도록 하겠습니다. WMI 스크립트를 사용하여 응용 프로그램의 응용 프로그램 풀을 수정하는 것은 매우 손쉬운 일이지만, 반드시 기억해야만 할 중요한 사실이 두 가지 있습니다. 먼저, IIS 는 여러분들이 지정한 응용 프로그램 풀이 실제로 존재하는지 점검해주지 않기 때문에, 이를 반드시 확인해야만 합니다. 그리고, 응용 프로그램 풀을 할당한 내용을 저장하려면, 반드시 Put_ 메서드를 호출해야 한다는 점을 기억하십시오. Application 클래스는 WMI 로부터 Put_ 메서드를 상속받습니다.

다음 스크립트는 기본 웹 사이트의 "/MyApp" 응용 프로그램의 응용 프로그램 풀을 "NewAppPool" 로 변경합니다. **:

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")


' MyApp 응용 프로그램을 얻습니다.
Set oApp = oWebAdmin.Get("Application.SiteName='Default Web Site',Path='/MyApp'")
WScript.Echo "Application Web site and Path: '" & oApp.SiteName & oApp.Path & "'"
WScript.Echo "Old application pool: " & oApp.ApplicationPool
WScript.Echo

' 새로운 응용 프로그램 풀의 이름을 지정합니다.
oApp.ApplicationPool = "NewAppPool"

' 변경 사항을 저장합니다.
oApp.Put_

' 새로운 응용 프로그램 풀의 이름을 출력합니다.
WScript.Echo
WScript.Echo "New application pool: " & oApp.ApplicationPool
응용 프로그램 풀 삭제

만약, 더 이상 사용하지 않는 응용 프로그램 풀을 제거하고자 한다면, WMI 로부터 상속받은 ApplicationPool 클래스의 Delete_ 메서드를 사용하면 됩니다.

다음 스크립트는 "UnwantedAppPool" 라는 이름의 응용 프로그램 풀을 삭제합니다.

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")


Set oAppPools = oWebAdmin.InstancesOf("ApplicationPool")
For Each oAppPool In oAppPools
    If oAppPool.Name = "UnwantedAppPool" Then
        oAppPool.Delete_
        Exit For
  End If
Next
웹 사이트의 기본 응용 프로그램 풀 설정

만약 특정 웹 사이트에 존재하는 모든 응용 프로그램의 기본 응용 프로그램 풀을 여러분들이 생성한 응용 프로그램 풀로 지정하고 싶다면, Site 개체의 ApplicationDefaults.ApplicationPool 속성을 사용하면 됩니다. 다시 한 번 강조하지만, 변경 내용을 저장하기 위해서는 Site 개체의 Put_ 메서드를 호출해야만 합니다.

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")


' 기본 웹 사이트를 얻습니다.
Set oSite = oWebAdmin.Get("Site.Name='Default Web Site'")

' 기본 응용 프로그램 풀 이름을 지정합니다.
oSite.ApplicationDefaults.ApplicationPool = "NewAppPool"

' 변경 사항을 저장합니다.
oSite.Put_
* 본문에서 제시하는 스크립트와 같이 특별히 파이프라인 모드를 지정하지 않고 응용 프로그램 풀을 생성하면 다음과 같이 파이프라인 모드가 통합 모드로 생성된다.
** 이 스크립트를 테스트 할 때, 테스트에 사용되는 응용 프로그램의 이름에 주의하기 바란다. 즉 본문의 모든 다른 스크립트 샘플 코드는 "/NewApp" 라는 이름의 응용 프로그램을 대상으로 작업을 수행하지만, 이 스크립트 샘플 코드에서만은 "/MyApp" 라는 이름의 응용 프로그램을 대상으로 작업을 수행한다. 따라서, 코드를 그대로 복사하여 실행하면 전혀 예상하지 못했던 오류를 만나게 될 것이다.


응용 프로그램 풀을 관리하는 방법

또한, WMI 스크립트를 사용하면 손쉽게 응용 프로그램 풀을 시작하거나 중지하고, 재생할 수 있습니다. 이번 단락에서는 이러한 작업들을 수행하는 방법을 살펴봅니다. 그리고, 추가적으로 응용 프로그램 풀의 현재 상태를 얻는 방법도 살펴보도록 하겠습니다.

응용 프로그램 풀 시작하기

IIS 7.0 에서는 IIS 6.0 의 IIsApplicationPool.Start 메서드를 대체하는 ApplicationPool.Start 메서드를 제공합니다.

다음과 같은 세 줄에 불과한 스크립트를 사용하여 응용 프로그램 풀을 시작할 수 있습니다.:

' WMI WebAdministration 네임스페이스에 연결합니다.

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

' 응용 프로그램 풀을 지정합니다.
Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='DefaultAppPool'")

' 응용 프로그램 풀을 시작합니다.
oAppPool.Start
응용 프로그램 풀 중지하기

IIS 7.0 에서는 IIS 6.0 의 IIsApplicationPool.Stop 메서드를 대체하는 ApplicationPool.Stop 메서드를 제공합니다.

응용 프로그램 풀을 중지하는 코드는 다음과 같습니다.:

' WMI WebAdministration 네임스페이스에 연결합니다.

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

' 응용 프로그램 풀을 지정합니다.
Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='DefaultAppPool'")

' 응용 프로그램 풀을 중지합니다.
oAppPool.Stop
응용 프로그램 풀 재생하기

IIS 7.0 에서는 IIS 6.0 의 IIsApplicationPool.Recycle 메서드에 해당하는 ApplicationPool.Recycle 메서드가 제공됩니다.

다음과 같이 응용 프로그램 풀을 재생하는 스크립트 코드는 이전 예제들의 패턴과 유사합니다. 그런데, 한 가지 주의해야 될 점은 Recycle 메서드는 이미 시작된 응용 프로그램 풀을 대상으로만 동작한다는 점입니다. *

' WMI WebAdministration 네임스페이스에 연결합니다.

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

' 응용 프로그램 풀을 지정합니다.
Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='DefaultAppPool'")

' 응용 프로그램 풀을 재생합니다.
oAppPool.Recycle
응용 프로그램 풀의 상태 얻기

응용 프로그램 풀의 런-타임 상태는 ApplicationPool 개체의 GetState 메서드를 사용하여 얻을 수 있으며, 그 결과값으로 0 에서 4 사이의 열거형 값이 리턴됩니다. 다음의 예제 코드는 리턴값의 의미와, 사용자 정의 함수를 사용하여 그 의미를 출력하는 방법을 보여주고 있습니다. IIS 6.0 에는 이 메서드에 직접적으로 해당하는 메서드가 존재하지 않습니다.

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='DefaultAppPool'")

' 응용 프로그램 풀의 이름과 상태를 얻습니다.
WScript.Echo oAppPool.Name & " is " & GetStateDescription(oAppPool.GetState) & "."

' 리턴값을 텍스트로 변환해주는 함수.
Function GetStateDescription(StateCode)
    Select Case StateCode
        Case 0
            GetStateDescription = "Starting"
        Case 1
            GetStateDescription = "Started"
        Case 2
            GetStateDescription = "Stopping"
        Case 3
            GetStateDescription = "Stopped"
        Case 4
            GetStateDescription = "Unknown"
        Case Else
            GetStateDescription = "Undefined value."
    End Select
End Function
여기서 리턴된 값은 스크립트가 실행되는 시점의 응용 프로그램 풀 상태만을 반영한다는 점을 기억하시기 바랍니다. 따라서, 이 리턴값은 실시간 결과를 반영하는 것은 아닙니다. 만약 실시간 상태를 얻고 싶다면, 특정 응용 프로그램 풀이나 응용 프로그램 풀들의 상태를 점검하기 위해 일정한 주기마다 스크립트가 실행되도록 스케쥴을 설정할 수 있습니다.

서버상에 존재하는 응용 프로그램 풀들의 목록 얻기

모든 응용 프로그램 풀들의 목록을 얻고, 각각의 응용 프로그램 풀의 속성을 출력하는 등과 같이 반복적인 작업을 처리하기 위해서 WMI InstancesOf 메서드를 사용할 수 있습니다. 다음 코드는 응용 프로그램 풀과 그 모드 (통합 모드, 또는 ISAPI 모드) 를 출력합니다.

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

Set oAppPools = oWebAdmin.InstancesOf("ApplicationPool")

For Each oAppPool In oAppPools

    WScript.Echo "Application pool name: " & oAppPool.Name

    If oAppPool.ManagedPipelineMode = 0 Then
        sAppPoolMode = "Integrated"
    ElseIf oAppPool.ManagedPipelineMode = 1 Then
        sAppPoolMode = "ISAPI"
    End if

    WScript.Echo "Application pool mode: " & sAppPoolMode
    WScript.Echo

Next
이 스크립트를 실행시켜보면, 아마도 다음과 비슷한 출력 결과를 확인할 수 있을 것입니다.:

Application pool name: DefaultAppPool

Application pool mode: Integrated

Application pool name: Classic .NET AppPool
Application pool mode: ISAPI
통합 모드 vs. ISAPI 모드 **

만약 관리되는 응용 프로그램이 통합 모드의 응용 프로그램 풀에서 실행된다면, 서버는 요청을 처리하기 위해 IIS 와 ASP.NET 의 통합 요청-처리 파이프라인을 사용하게 됩니다. 그러나, 만약 관리되는 응용 프로그램이 ISAPI 모드의 응용 프로그램 풀에서 실행된다면, 서버는 요청을 처리하기 위해 IIS 6.0 에서 사용되던 것과 같은 Aspnet_isapi.dll 을 사용한 관리되는 코드 처리를 수행할 것입니다.

거의 대부분의 관리되는 응용 프로그램은 통합 모드에서 실행될 수 있지만, 일부 응용 프로그램은 호환성을 이유로 ISAPI 모드에서 실행되어야만 합니다. 따라서, 일단 먼저 통합 모드에서 응용 프로그램을 테스트해 본 다음, ISAPI 모드가 정말로 필요한지 결정하시기를 권해드립니다.

* 단적으로 중지되어 있는 응용 프로그램 풀을 재생시키기 위해서 ApplicationPool.Recycle 메서드를 호출하면 오류가 발생하게 된다.
** 본문에서 사용되고 있는 "통합 모드" 와 "ISAPI 모드" 라는 용어는, 마이크로소프트의 다른 문서에서는 각각 "IIS 7.0 통합 모드" 와 "클래식 ASP.NET 통합 모드" 라고 사용되는 경우가 더 많다. 그렇지만, 이미 한글화가 완료된 비스타를 기준으로 살펴보면 단순히 "통합 모드" 와 "클래식 모드" 라는 용어가 사용되고 있으므로 한글 용어는 가급적이면 이를 따르는 것이 좋을 것이다.

이 두 가지 모드의 차이점을 가장 간단하게 살펴보려면 다음의 링크를 클릭하여 IIS.net 에서 제공해주는 이미지를 살펴보기 바란다. 여러가지 다양한 이슈들이 이 두 장에 그림에 모두 녹아있다.


결론

본문에서는 WMI 스크립트를 사용하여 다음과 같은 기본적인 작업들을 처리하는 방법을 살펴보았습니다.:

  • 응용 프로그램을 생성하고 열거하는 방법
  • 응용 프로그램 풀을 생성하고, 구성하고, 삭제하는 방법
  • 응용 프로그램 풀을 시작하고, 중지하고, 재생하는 방법
  • 응용 프로그램 풀의 상태를 조회하는 방법
  • 서버상에 존재하는 모든 응용 프로그램 풀의 목록을 얻는 방법
응용 프로그램과 응용 프로그램 풀에는 본문에서 다루지 않은 추가적인 기능들이 존재합니다. 보다 많은 정보를 보시려면, IIS 7.0 WMI Provider Reference 문서를 살펴보시기 바랍니다. *

* 본격적으로 WMI 스크립트를 사용하여 IIS 7.0 을 관리하고자 한다면, 본문에서 소개하고 있는 WMI 제공자 레퍼런스를 한 번은 꼼꼼하게 검토해 볼 필요가 있을 것이다. 그러나, 다시 한 번 강조하지만 별다른 문제가 없고, 관리되는 프로그램 (.NET) 을 사용하는 환경이라면, WMI 대신 MWA 를 사용하는 것을 더 권장한다. 이 주제에 관해서는 필자가 번역하여 MSDN 에 기고한 Microsoft.Web.Administration.dll 관련 문서를 참고하기 바란다.


authored by


 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})