페더레이션 서버 프록시에 페더레이션 수동 웹 사이트 응용 프로그램 없음

Microsoft.ActiveDirectoryFederationServices20.FederationServerProxyWebsitesIISVDirMonitor (UnitMonitor)

Knowledge Base article:

요약

페더레이션 서버 프록시의 IIS에 AD FS 2.0 페더레이션 수동 웹 사이트 응용 프로그램이 없습니다.

원인

AD FS 2.0 페더레이션 수동 웹 사이트 응용 프로그램이 삭제되었습니다.

해결 방법

AD FS 2.0 페더레이션 수동 웹 사이트용 IIS 응용 프로그램을 추가합니다.

1. %system root%\inetpub\ 아래에 adfs라는 새 폴더를 만듭니다.

2. %system root%\inetpub\adfs\ 아래에 ls라는 새 폴더를 만듭니다.

3. %system root%\Program Files\Active Directory Federation Services 2.0\WSFederationPassive.Web\ 아래의 모든 파일을 %system root%\inetpub\adfs\ls\로 복사합니다.

4. IIS 관리자 스냅인의 응용 프로그램 풀 아래에 ADFSAppPool이라는 새 응용 프로그램 풀을 만듭니다. 그런 다음 이 응용 프로그램 풀이 시작되었는지 확인합니다.

5. IIS의 기본 웹 사이트 아래에 실제 경로가 %system root%\inetpub\adfs를 가리키고 응용 프로그램 풀이 ADFSAppPool로 선택된 adfs라는 별칭의 새 응용 프로그램을 추가합니다.

6. adfs 응용 프로그램 아래에 실제 경로가 %system root%\inetpub\ls를 가리키고 응용 프로그램 풀이 ADFSAppPool로 선택된 ls라는 별칭의 새 응용 프로그램을 추가합니다.

Element properties:

TargetMicrosoft.ActiveDirectoryFederationServices20.FederationServerProxyWebsites
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.ActiveDirectoryFederationServices20.TwoStateScriptMonitorType
RemotableTrue
AccessibilityPublic
Alert Message
페더레이션 서버 프록시에 페더레이션 수동 웹 사이트 응용 프로그램 없음
페더레이션 서버 프록시의 IIS에 AD FS 2.0 페더레이션 수동 웹 사이트 응용 프로그램이 없습니다.
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.ActiveDirectoryFederationServices20.FederationServerProxyWebsitesIISVDirMonitor" Accessibility="Public" Enabled="true" Target="Microsoft.ActiveDirectoryFederationServices20.FederationServerProxyWebsites" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Microsoft.ActiveDirectoryFederationServices20.TwoStateScriptMonitorType" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.ActiveDirectoryFederationServices20.FederationServerProxyWebsitesIISVDirMonitor_AlertMessageResourceID">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Success" MonitorTypeStateID="Success" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
</OperationalStates>
<Configuration>
<PowerShellPath>%windir%\system32\windowspowershell\v1.0\powershell.exe</PowerShellPath>
<ScriptName>FederationServerProxyWebsitesIISVDirCheck.ps1</ScriptName>
<ScriptBody><Script>
function GetNodeFromConfig($vDir, [string] $xpath, $nsmgr)
{
$config = ($vDir.path + "\web.config")
$cpNode = $null

if ([System.IO.File]::Exists($config))
{
[System.Xml.XmlDocument] $xd = new-object System.Xml.XmlDocument
$xd.load( $config )
$cpNode = $xd.SelectSingleNode($xpath,$nsmgr)
}
return $cpNode
}

function GetFedPassiveVDir()
{
$fpVDir = $null
$vDir = $vDirs | where {$_.name.EndsWith( "/adfs/ls" )}
if (-not(($vDir -eq $null)))
{
$fpVDir = $vDir
}
else
{
foreach ($vDir in $vDirs)
{
$temp = GetNodeFromConfig $vDir "configuration/microsoft.identityServer.web" $null
if (-not(($temp -eq $null)))
{
$fpVDir = $vDir
break;
}
}
}
return $fpVDir
}

$scomapi = new-object -comObject "MOM.ScriptAPI"
$scomapi.LogScriptEvent("ActiveDirectoryFederationServices", 900, 4, "IIS VDir check PowerShell monitoring script")

$script:vDirOK = $true
$script:vDirName = ""
#try
&amp;{

$vDirs = Get-WmiObject -namespace root/MicrosoftIISV2 -class IISWebVirtualDirSetting
$vDir = GetFedPassiveVDir

if ( $vDir -eq $null)
{
$script:vDirOK = $false
$script:vDirName = "/adfs/ls"
}
}
trap [System.Exception]
{
$scomapi.LogScriptEvent("ActiveDirectoryFederationServices", 901, 2, "IIS VDir check PowerShell monitoring script failed. " + $_.Exception.Message )
continue
}

$scompb = $scomapi.CreatePropertyBag()
$scompb.AddValue("VDirOK", $script:vDirOK )
$scompb.AddValue("VDir", $script:vDirName )
$scomapi.AddItem($scompb)
$scomapi.ReturnItems()

</Script></ScriptBody>
<IntervalSeconds>300</IntervalSeconds>
<TimeoutSeconds>180</TimeoutSeconds>
<ErrorExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='VDirOK']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">false</Value>
</ValueExpression>
</SimpleExpression>
</ErrorExpression>
<SuccessExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='VDirOK']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">true</Value>
</ValueExpression>
</SimpleExpression>
</SuccessExpression>
</Configuration>
</UnitMonitor>