[Kateryna’s Blog Troubleshooting Common MSDeploy Issues ]の翻訳です。
この記事では、潜在的な問題や質問の解決に役立つクイック リファレンス トラブルシューティング ガイドを提供します。すべての問題が掲載されているわけではありませんが、必要に応じて更新され、最新の問題や回避策が示される予定です。
この記事で説明されている問題:
MSDeploy エージェントを介して同期処理を行う場合、対応する MSDeploy サービスがリモート コンピューター上で開始されていることを確認します。
net start msdepsvc
エージェントの場合と同様に、ハンドラーを介して同期処理を行う場合、対応するサービスが開始されていることを確認します。
net start wmsvc
MSDeploy は、既定では、ポート 8172 で動作します。ファイアウォールでポート 8172 を有効にするには、次のコマンドを実行します。
netsh firewall add portopening TCP 8172 WdeployAgent
致命的なエラーは %TEMP%\Web_Deployment_Agent_Service.log に記録されます。%TEMP% は、既定では Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\MSDepSvc で、サービス ID の一時フォルダーです。
展開先の設定が展開元の設定と異なる場合 (ファイル パスのシステム ドライブが異なるなど)、スキップ/置換規則を作成して設定を変更できます。コンテンツが c:\wwwroot\inetpub にある IIS6 サイトを、d:\wwwroot\inetpub にマップされている別のサイトに同期する場合、次のような置換規則を作成して、一行で同期を実現できます。
msdeploy.exe -verb:sync -source:metaKey=/lm/w3svc/2 -dest:metaKey=/lm/w3svc/3 -replace:objectName=metaProperty,scopeAttributeName=name,scopeAttributeValue=path,targetAttributeName=value,match="e:",replace="d:"
置換のスキップ規則の作成に関するリソースについては、「MSDeploy 用のスキップ規則と置換規則を作成する方法 (英語)」を参照してください。
Web サーバー/サイトのコンテンツをMSDeploy の同期操作ではなく、個別にコピーしたい場合は、コマンド ライン オプション -disableLink:ContentExtension を使用してください。
例 (コンテンツを含めずにサーバーを別のサーバーに同期する) : msdeploy -verb:sync -source:webserver -dest:webserver,computerName=URLtoRemoteAgent
サイトを同期するときに、そのアプリケーション プールがプルされない場合 (既定の動作)、–enableLink:AppPoolExtension スイッチを使用することによってアプリケーション プールのプルを有効にすることができます。
例 (アプリケーション プールを含むサイトのバックアップを作成する): msdeploy -verb:sync -source:appHostConfig="MySite" -dest:package="c:\BackupUpOfSiteWithAppPool.zip" -enableLink:AppPoolExtension
チェックする項目 :
IIS ユーザーとして同期している場合、アクセスしようとしているコンテンツ パスについて、ACL で NT Service\WMSvc ID に読み取り/書き込みアクセスが許可されている必要があります。
アプリケーション プールの ID に問題があると考えられる場合は、管理者特権でアプリケーション プールを実行し、問題が発生するかどうかを確認し、必要に応じてアクセス許可の問題を修正して、アプリケーション プールを元の ID に設定します。
管理者以外のアカウントで同期処理を実行している場合、リモート サーバー上で委任規則が正しく設定されていることを確認します。たとえば、すべてのユーザーに iisApp パッケージのインポートを許可し、ユーザー接続スコープ内で ACL を設定するには、以下の規則を administration.config ファイルの "system.webServer/management" セクションに追加します。
<!-- 委任規則のバイパスを管理者に許可しない場合は、allowAdministrators を "false" に設定する --> <delegation allowAdministrators="false"> <!-- 現在のユーザーとして操作の実行を試行する。 これらの操作を特定のユーザーとし���実行する場合は、以下の "runAs" のコメントを解除する --> <rule providers="iisapp,createapp,contentpath,setAcl" actions="*" path="{userScope}"> <permissions> <user name="*" isRole="false" accessType="Allow" /> </permissions> <!-- <runAs identityType="SpecificUser" userName="iisAppUser" password="iis6!dfu" /> --> </rule> </delegation>
C# での委任規則の作成を自動化する方法については、IIS.NET の記事「Web Deployment Handler の構成 (英語)」を参照してください。
クライアントでどのようにサーバー証明書が検証されていますか。 - コマンド ラインを実行してサーバーを信頼している場合は、-allowUntrusted スイッチを指定して、信頼されていない証明書を受理します。 - MSDeploy API のインターフェイスとなる独自のクライアントを作成し、リモート コンピューターと同期する場合は、証明書の検証を委任し、サーバー証明書を検証します。 証明書検証の委任の詳細については、MSDN の記事「知っていますか: 自己発行証明書を使用した、IIS サーバーへのリモート接続の確立には、証明書の検証を委任する必要があることを (英語)」も参照してください。
MSDeploy を使用して IIS を操作したり、IIS6 から IIS7 にサイトを移行したりすることができます。サイトを IIS6 から IIS7 に移行する方法については、「IIS 6.0 から IIS 7.0 への移行 (英語)」の記事を参照してください。以下に、一般的な問題を回避するためのいくつかの重要なヒントやテクニックを示します。
IIS6 サーバー全体を同期するには、IIS7 サーバー用に予約されている webserver ではなく、webserver60 プロバイダーを使用してください。
特定のメタベース パス (サイトまたはアプリケーション) を同期するには、metakey プロバイダーを使用してください。
メタベース パスの siteId を指定するには、サイト/アプリケーションの ID を識別してください。メタベース パスの一覧を出力するには、次のコマンドを実行します。
adsutil enum /p w3svc Microsoft (R) Windows Script Host Version 5.7 Copyright (C) Microsoft Corporation.All rights reserved. [/w3svc/Info] [/w3svc/Filters]
adsutil enum /p w3svc Microsoft (R) Windows Script Host Version 5.7 Copyright (C) Microsoft Corporation.All rights reserved.
[/w3svc/Info] [/w3svc/Filters]
-debug スイッチを指定してコマンドを実行し、MSDeploy フォーラム (英語) に質問とスタック トレースを投稿してください。
解決策が見つかることを祈っています。