Skip to main content

Web APIおよびOwinで.NET Frameworkエージェントをインストール

.NET Frameworkエージェントは、Open Web Interface for .NET (OWIN)でセルフホストされるWeb APIアプリケーションの解析をサポートします。Web APIは、コマンドラインアプリケーションやWindowsサービスとしてデプロイできます。

注記

SystemWebのHttpModuleを使用してIIS統合パイプラインにホストされているWeb APIアプリケーションや、OWINホストでデプロイされているWeb APIアプリケーションはサポート対象外です。

  1. .NET FrameworkエージェントのWindowsインストーラを使用して、.NET Frameworkエージェントをインストールします。

  2. OWINホストのWeb APIをどのようにデプロイするかによって、環境変数を設定します。

    • コマンドラインアプリケーションとしてデプロイ:OWINをセルフホストにするために使用されるコマンドラインアプリケーションを実行する前に、以下の環境変数を設定します。

      環境変数

      COR_ENABLE_PROFILING

      1

      COR_PROFILER

      {EFEB8EE0-6D39-4347-A5FE-4D0C88BC5BC1}

      COR_PROFILER_PATH_32

      C:\Program Files\Contrast\dotnet\runtimes\win-x86\native\ContrastProfiler.dll

      COR_PROFILER_PATH_64

      C:\Program Files\Contrast\dotnet\runtimes\win-x64\native\ContrastProfiler.dll

      注記

      COR_PROFILER_PATH_32 / COR_PROFILER_PATH_64は、.NET Frameworkエージェントのインストールで選択したインストールディレクトリと一致する必要があります。

    • Windowsサービスとしてデプロイ:

      Web APIアプリケーションを含むサービスをインストールします。サービスの名前を確認します。

      サービスのレジストリキーの下に、Environmentという名前のREG_MULTI_SZ値を作成します。既にEnvironment値がある場合は、既存の値の下に新しい値を追加します。

      必要な環境変数を設定します。各環境変数はキーと値をペアにして、それぞれ改行してください。各サービスに固有の環境変数は、そのサービスのレジストリキーの下に設定できます。サービスのレジストリキーは次の場所にあります:HKLM\SYSTEM\CurrentControlSet\Services\YourServiceName

      環境変数

      COR_ENABLE_PROFILING

      1

      COR_PROFILER

      {EFEB8EE0-6D39-4347-A5FE-4D0C88BC5BC1}

      COR_PROFILER_PATH_32

      C:\Program Files\Contrast\dotnet\runtimes\win-x86\native\ContrastProfiler.dll

      COR_PROFILER_PATH_64

      C:\Program Files\Contrast\dotnet\runtimes\win-x64\native\ContrastProfiler.dll

      CONTRAST_CONFIG_PATH

      C:\ProgramData\contrast\dotnet\contrast_security.yaml

      注記

      COR_PROFILER_PATH_32 / COR_PROFILER_PATH_64は、.NET Frameworkエージェントのインストールで選択したインストールディレクトリと一致する必要があります。

  3. サービスを再起動して、新しい値をロードします。必要な環境変数を設定するために、以下のPowerShellスクリプトを使用できます。

    param (
        # Name of the service that it was given at installation.
        [Parameter(Mandatory=$true)]
        [string]
        $ServiceName,
    
        # Path to the 64-bit Contrast profiler DLL.
        # Defaults to: "C:\Program Files\Contrast\dotnet\runtimes\win-x64\native\ContrastProfiler.dll"
        [string]
        $ProfilerPath64 = "C:\Program Files\Contrast\dotnet\runtimes\win-x64\native\ContrastProfiler.dll",
    
        # Path to the 32-bit Contrast profiler DLL.
        # Defaults to: "C:\Program Files\Contrast\dotnet\runtimes\win-x86\native\ContrastProfiler.dll"
        [string]
        $ProfilerPath32 = "C:\Program Files\Contrast\dotnet\runtimes\win-x86\native\ContrastProfiler.dll",
    
        # Path to the Contrast agent configuration YAML file.
        # Defaults to: "C:\ProgramData\contrast\dotnet\contrast_security.yaml"
        [string]
        $ConfigYamlPath = "C:\ProgramData\contrast\dotnet\contrast_security.yaml"
    )
    
    if (-Not (Test-Path -Path $ProfilerPath64 -PathType Leaf)) {
        Write-Host "Cannot find 64-bit profiler DLL at path `"$ProfilerPath64`"."
        exit 1
    }
    
    if (-Not (Test-Path -Path $ConfigYamlPath -PathType Leaf)) {
        Write-Host "Cannot find configuration YAML file at path `"$ConfigYamlPath`"."
        exit 1
    }
    
    if (-Not (Test-Path -Path $ProfilerPath32 -PathType Leaf)) {
        Write-Host "Cannot find 32-bit profiler DLL at path `"$ProfilerPath32`"."
        exit 1
    }
    
    # Check if there is a service with the specified name installed.
    $service = Get-Service -Name $ServiceName -ErrorAction Ignore
    
    if ($null -Eq $service) {
        Write-Host "The service `"$ServiceName`" was not found."
        exit 2
    }
    
    # Create value for multiline registry string.
    $values = @(
        "COR_ENABLE_PROFILING=1",
        "COR_PROFILER={EFEB8EE0-6D39-4347-A5FE-4D0C88BC5BC1}",
        "COR_PROFILER_PATH_64=$ProfilerPath64",
        "COR_PROFILER_PATH_32=$ProfilerPath32",
        "CONTRAST_CONFIG_PATH=$ConfigYamlPath"
    )
    
    $registryKey = "HKLM:\SYSTEM\CurrentControlSet\Services\$ServiceName"
    
    # Check if the Environment value already exists.
    $environmentValue = Get-ItemProperty -Path $registryKey -Name "Environment" -ErrorAction Ignore
    
    if ($null -Ne $environmentValue) {
        # Add the Contrast environment variables to the existing variables.
        $existingValues = [System.Collections.ArrayList]@($environmentValue.Environment)
        foreach ($item in $values) {
            $idx = $existingValues.Add($item)
        }
        $values = $existingValues
    }
    
    # Set the environment variables for the service.
    Set-ItemProperty -Path $registryKey -Type MultiString -Name "Environment" -Value $values
    
    # Restart the service so it picks up the new environment variables.
    Restart-Service -Name $ServiceName