다음을 통해 공유


서비스 동작 구성의 위치를 검색하는 Windows PowerShell 스크립트

WCF 4.0은 구성 계층의 여러 구성 파일에서 서비스 동작을 병합할 수 있는 기능을 추가합니다. 이 기능을 통해 높은 수준의 구성 파일(예: 사이트 수준 web.config)에서는 일반 동작을 정의하고 낮은 수준의 구성 파일에서는 추가 동작을 정의하는 작업을 보다 쉽게 수행할 수 있습니다. 다음 예에서는 이 기능이 어떻게 작동하는지 보여 줍니다.

사이트 수준 web.config

  <configuration>
    <system.serviceModel>
      <behaviors>
        <serviceBehaviors>
          <behavior name="MyBehavior">
            <serviceDebug includeExceptionDetailInFaults="True" />
            <serviceMetadata httpGetEnabled="True" />
          </behavior>
        </serviceBehaviors>
      </behaviors>
    </system.serviceModel>
  </configuration>

응용 프로그램 수준 web.config

  <configuration>
    <system.serviceModel>
      <behaviors>
        <serviceBehaviors>
          <behavior name="MyBehavior">
            <etwTracking profileName="Troubleshooting Tracking Profile" />
          </behavior>
        </serviceBehaviors>
      </behaviors>
    </system.serviceModel>
  </configuration>

응용 프로그램에 포함되어 있고 “MyBehavior”를 사용하도록 구성된 WCF 서비스는 serviceDebug/serviceMetadataetwTracking 구성을 둘 다 효과적으로 상속합니다. 병합된 동작 구성에 대한 자세한 내용은 WCF 4.0 구성에서 동작 병합(https://go.microsoft.com/fwlink/?LinkId=194422)(영문) 및 .NET 구성 병합 기본 동작(https://go.microsoft.com/fwlink/?LinkId=194423)(영문)을 참조하십시오.

병합된 동작 구성의 유연성에도 불구하고 서비스의 실제 동작 구성이 로컬 web.config에 정의된 동작 구성과 다를 수 있기 때문에 혼동이 생기는 경우가 있습니다. 이 샘플에서는 서비스 동작 구성을 분석하고 실제 설정이 들어 있는 구성 파일의 위치를 보고하는 PowerShell 스크립트를 cmdlet 형식으로 작성하는 방법을 보여 줍니다.

참고

샘플은 교육용으로만 제공됩니다. 프로덕션 환경에서 사용하도록 작성된 것은 아니며 프로덕션 환경에서 테스트되지 않았습니다. Microsoft는 이러한 샘플에 대한 기술 지원을 제공하지 않습니다.

사전 요구 사항

Windows PowerShell 스크립팅 및 AppFabric cmdlet에 대해 잘 알고 있어야 합니다.

이 샘플의 사전 요구 사항은 다음과 같습니다.

  • PowerShell v2가 설치되어 있습니다.

  • 기본 AppFabric 설치가 수행되었습니다.

샘플 위치 및 파일

샘플 파일에는 다음이 포함되어 있습니다.

  • Readme.mhtml

  • Code\detectServiceBehaviorConfigLocation.ps1

이 샘플 설정 및 실행

  1. 다음 예에서는 PowerShell 콘솔에서 스크립트 cmdlet을 실행하는 방법을 보여 줍니다.

    PS> cd <samples>\Samples\Management\DetectServiceBehaviorConfigLocation\Code
    
    PS> . .\detectServiceBehaviorConfigLocation.ps1 #the first dot is for loading the ps1 as a function library
    
    PS> Get-ServiceBehaviorConfigLocation -SiteName "Default Web Site" -VirtualPath /App/service.svc
    
    Name                                                        Location
    ----                                                        --------
    etwTracking                                                 MACHINE/WEBROOT/APPHOST/Default Web Site
    serviceDebug                                                MACHINE/WEBROOT/APPHOST/Default Web Site/App
    serviceMetadata                                             MACHINE/WEBROOT/APPHOST/Default Web Site/App
    

    참고

    샘플을 실행하기 위해 실행 정책을 'Restricted'에서 'RemoteSigned'로 변경해야 할 수도 있습니다.

    참고

    Get-ServiceBehaviorConfigLocation cmdlet은 두 개의 매개 변수를 사용하는데, 이러한 매개 변수는 대상 서비스의 SiteName 및 VirtualPath를 지정하고 IIS 경로 형식으로 구성 파일 위치를 포함하고 있는 실제 동작 구성 설정의 목록을 반환합니다.

  2. 또한 이 cmdlet은 파이프라인을 통해 AppFabric의 Get-ASAppService cmdlet이 출력하는 정보를 받습니다. 무엇보다도 이 cmdlet은 이로 인해 지정된 범위에서 검색된 모든 서비스와 작동할 수 있게 됩니다. 이에 대해서는 다음 단계에서 설명합니다.

    PS> Get-ASAppService -SiteName "Default Web Site" | 
          foreach-object {$service=$_; Get-ServiceBehaviorConfigLocation $service | 
          select-object @{Name="SiteName"; Expression={$service.SiteName}}, @{Name="VirtualPath"; Expression={$service.VirtualPath}}, "Name", "Location"}
    
    SiteName                      VirtualPath                   Name                          Location
    --------                      -----------                   ----                          --------
    Default Web Site              /App/service.svc            serviceDebug                  MACHINE/WEBROOT/APPHOST/De...
    Default Web Site              /App/service.svc            serviceMetadata               MACHINE/WEBROOT/APPHOST/De...
    Default Web Site              /AnotherApp/HelpRequestT... etwTracking                   MACHINE/WEBROOT
    Default Web Site              /AnotherApp/HelpRequestT... workflowInstanceManagement    MACHINE/WEBROOT
    ...
    

    Get-ASAppService에 의해 검색된 서비스 목록이 Get-ServiceBehaviorConfigLocation으로 파이프되고 foreach 절이 사용되어 최종 출력의 형식이 지정됩니다. 이때 서비스와 해당 동작 설정이 서로 연결될 수 있도록 각 서비스의 SiteNameVirtualPath가 원래 결과에 추가됩니다.

이 샘플 제거

  1. 이 샘플을 실행해도 컴퓨터의 리소스가 수정되지 않기 때문에 PowerShell 세션을 닫기만 하면 됩니다.

설명

이 샘플의 스크립트는 다음과 같은 네 개의 섹션으로 구성되어 있습니다.

초기화

모든 종속성을 로드하는 스크립트의 첫 부분입니다. 여기에는 IIS 구성을 읽기 위한 Microsoft.Web.Administration 라이브러리 및 AppFabric cmdlet 모듈을 로드하는 과정이 포함됩니다.

if ((Get-Command -Module ApplicationServer) -eq $null)
{
    Import-Module ApplicationServer
}

[System.Reflection.Assembly]::LoadFrom( "C:\windows\system32\inetsrv\Microsoft.Web.Administration.dll" ) | Out-Null

Cmdlet 함수

이 샘플의 또 다른 목적은 코드가 아닌 스크립트에서 cmdlet을 작성하는 방법을 보여 주는 것입니다. Get-ServiceBehaviorConfigLocation은 cmdlet을 정의하는 함수입니다. PowerShell 스크립트의 일반 함수와 달리 이 함수에는 cmdlet 매개 변수 집합, 레코드 처리 논리 및 레코드 정리 논리를 각각 정의하는 Param, ProcessEnd가 포함되어 있습니다.

이 샘플에서는 이 cmdlet 함수가 입력 매개 변수를 정규화하는 역할만 하고, 동작 구성 설정의 위치를 검색하기 위한 기본 논리가 포함된 GetBehaviorConfigLocationPerService 함수를 호출합니다.

기본 함수

기본 함수 GetBehaviorConfigLocationPerService는 먼저 서비스 범위에 있는 구성 파일을 엽니다. 이 샘플에서는 Microsoft.Web.Administration.dll의 관리 코드 API를 사용하여 IIS 구성 계층에 있는 구성 파일을 읽습니다. 그런 다음 일치하는 서비스 구성이 있는 모든 <behavior> 요소를 찾고 각 요소의 자식 요소를 모두 열거합니다.

이 함수는 열거가 진행되는 동안 실제 동작 설정의 목록을 저장하는 해시 테이블($effectiveChildElementMap)을 유지 관리합니다. 구성 계층의 아래쪽으로 열거가 진행되면서 이 해시 테이블의 콘텐츠도 따라서 변경됩니다. 예를 들어, <remove name=”X”/> 요소가 관찰되면 설정 X가 제거됩니다. 열거가 완료되면 해시 테이블의 최종 값은 서비스의 실제 동작 구성과 일치하게 됩니다.

도우미 함수

  • FindBehaviorElementsByName - 지정된 이름과 일치하는 "이름" 특성이 있는 모든 <behavior> 요소를 찾습니다.

  • IsClearTagPresent - 지정된 <behavior> 요소 아래에 <clear> 요소가 있는지 확인합니다.

  • IsRemoveTagPresent - 일치하는 "이름" 특성이 있는 <remove> 요소가 지정된 <behavior> 요소 아래에 있는지 확인합니다.

Known Issues/Limitations

  • 동일한 부모 <behavior> 요소 아래에 <remove>/<clear> 요소가 먼저 나타나는지 아니면 다른 요소가 먼저 나타나는지는 Microsoft.Web.Administration API로도 확인할 수 없습니다. 이 샘플에서는 <remove> 및 <clear> 요소가 먼저 나타난다고 가정합니다.

  2011-12-05