38

msdeployインストールとセットアップをしようとしています。Web サーバーにリモート サービスをインストールしましたが、すべてのテストで401 unauthorised error. サーバーは Windows 2008 R2 です。

非常に単純な msdeploy コマンドをテストしています。

msdeploy -verb:dump -source:contentPath=c:\inetpub\wwwroot\MyApp,computerName=<IP HERE>,userName=Domain\msdeploy,password=MyPassword

そしてエラー:

Error: Object of type 'contentPath' and path 'c:\inetpub\wwwroot\MonApp' cannot be created.
Error: Remote agent (URL http://<IP HERE>/MSDEPLOYAGENTSERVICE) could not be contacted.  Make sure the remote agent service is installed and started on the target computer.
Error: An unsupported response was received. The response header 'MSDeploy.Response' was '' but 'v1' was expected.
Error: The remote server returned an error: (401) Unauthorized.
Error count: 1.

msdeploy というユーザーを作成し、サーバーのローカル管理者グループに追加しました。

私はチェックしました:

  • サービスが適切にインストールされ、開始したこと
  • ユーザー名のドメイン部分を使用せず、authType=Basic を追加するさまざまな組み合わせ
  • そのフォルダへの完全なアクセス許可を全員に与える
  • IIS でリモート接続を許可する
  • contentPath および iisApp の「msdeploy」ユーザーに管理サービスの委任ルールを追加しました (これを読むことに大まかに基づいています)
  • サーバーへのRDCに使用する別の管理者アカウントで試しました...
  • さまざまな contentPaths とさまざまな msdeploy コマンドで試しました
  • 特定のアカウントを作成し、そのアカウントを IIS_Users に追加しました。そのユーザーを私の Web サイト "IIS Manager Permissions" に追加し、すべてのプロバイダーに対して "Management Service Delegation" をセットアップしました。
4

5 に答える 5

56

この記事に従って、WebDeploy 2.0 用にサーバーを正しく構成したと仮定しています。

Web 配置を構成する (IIS.NET)

注: MS は Web Deploy 2.0 の更新をリリースしたため、元のリンクはもはや有効ではありません。これを更新しましたが、時間の経過とともに移動するターゲットになると思います.

また、開発/ビルド/CI マシンに Web Deploy 2.0 をインストールする必要があります。

まだ 1.0 を使用している場合は、アップグレードすることをお勧めします。2.0 には大幅な改善がいくつかあります。

Visual Studio 2010 の発行機能の使用:

Visual Studio は、サイトを右クリックして [公開] を選択することで、サイトを公開できます。これにより、次のダイアログが表示されます。

ここに画像の説明を入力

Visual Studio 2010 と WebDeploy 2.0 にはいくつかの問題があります。1 つ目は、VS2010 が WebDeploy/MSDeploy 2.0 に対応していないことです。したがって、公開しようとすると、次のようなエラーが発生します。

エラー 1 Web 配置タスクが失敗しました。((04/02/2011 12:30:40) リモート コンピューターで要求が処理されたときにエラーが発生しました。)

ここに画像の説明を入力

C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1これがオンになっていると仮定すると、サーバー上の Web 管理サービスの Failed Request Tracing に次のエラーも表示されます。

AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData トレース展開エージェントの例外。リクエストID「」。要求のタイムスタンプ: '02/04/2011
System.UnauthorizedAccessException: パス 'D:\' へのアクセスが拒否されました。

ここに画像の説明を入力

ドライブ文字は、IIS サイトが配置されているドライブによって異なります。

デフォルトでは、GUI 内パブリッシュ メカニズムは、間違ったバージョンの MSDeploy (1.0) を使用するようにデフォルト設定されています。VS2010 に MSDeploy 2.0 を使用するように指示します。これを行うには、次の場所にある Visual Studio 2010 のファイルを編集します (デフォルトドライブのインストールdevenv.exe.configを行ったと仮定します)。c:\

64 ビット システムの場合: c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE 32 ビット システムの場合:c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE

devenv.exe.configお気に入りの XML エディター (私は Visual Studio 2010 自体を使用しました) で開き、次の xml をコピーします。

<dependentAssembly>
  <assemblyIdentity 
    name="Microsoft.Web.Deployment" 
    publicKeyToken="31bf3856ad364e35" culture="neutral"/>
  <bindingRedirect oldVersion="7.1.0.0" newVersion="8.0.0.0"/>
</dependentAssembly>

/configuration/runtime/assemblyBindingこれをセクションに追加します。

ここに画像の説明を入力

これが完了したら、Visual Studio 2010 のすべてのインスタンスを閉じて、この変更を有効にします。VS2010 を再起動し、Web プロジェクトを開いてから、もう一度公開してみてください。今度は成功するはずです。

ビルド パッケージを使用した公開:

Visual Studio は、コマンド ラインから実行できるビルド パッケージを生成できます。これは を使用して生成されProject -> Build Deployment Packageます。継続的インテグレーションなどに便利です (msbuild を使用して/t:Packageスイッチを使用してパッケージを生成することもできます)。

通常、パッケージの出力フォルダーはデフォルトでobj\Package.

残念ながら、Visual Studio 2010 はこれを少し間違っており、1.0 を対象とし、サイト レベルではなくサーバーでの展開を対象とする msdeploy ラッパー バッチ スクリプトを生成します。

独自の msdeploy.exe コマンド ラインを作成する以外に、これを簡単に修正する方法はありません。もう少し読みやすくするために、これを複数の行に分割しました。

"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe"
  -source:archiveDir='d:\sites\DemoApp\obj\Package\Archive'
  -宛先:
       自動、
       computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
       userName='デモサイト',
       password='somepassword',
       authtype='ベーシック',
       includeAcls='False'
  -動詞:同期
  -disableLink:AppPoolExtension
  -disableLink:ContentExtension
  -disableLink:CertificateExtension
  -setParamFile:"d:\sites\DemoApp\obj\Package\Archive.SetParameters.xml"   
  -信頼されていないことを許可する

最初に注意することは、へのパスmsdeploy.exeです。Visual Studio は、バージョン 1.0 へのパスを生成します。これを 2.0 を使用するように変更しました。

注目すべきパラメータ:

-source:archiveDir=パッケージを展開していることを msdeploy に伝え、ローカルの場所を提供します

computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename'- これにより、MSDEPLOY が IIS7 上の特定のサイトに展開するように指示されます。yoursitenameIIS のサイトの名前と正確に一致する必要があります。

userNameare は、passwordサイトの委任された管理者ユーザーの名前です。これは、サイト レベルで「IIS マネージャーのアクセス許可」機能を使用して構成されます。アカウントは、ローカルの Windows ユーザー アカウントである必要があります。

-authtype='basic'- これにより基本認証が強制され、それ以外の場合は NTLM 認証が試行されます。

-allowuntrusted- 組み込みの自己署名 SSL 証明書を使用する場合、SSL 証明書エラーは無視されます。

そのコマンド ラインを使用すると、リモート IIS7 サーバーに正常に展開できるはずです。

生のコンテンツの公開:

ローカル フォルダーから直接、静的コンテンツ (またはクラシック ASP または PHP サイト) を公開したい場合があります。msdeploy.exe次のコマンドラインを使用してこれを行うことができます。

"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe"
  -source:contentPath='d:\websites\mysite'
  -宛先:
     contentPath='あなたのサイト名',
     computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
     userName='デモサイト',
     password='somepassword',
     authtype='ベーシック',
     includeAcls='False'
-動詞:同期
-信頼されていないことを許可する

-dest:contentPathと についても、前と同じ規則が適用されますcomputerName

MSDeploy のバージョンの問題は SP1 で解決されると思います (まだ見る機会がありませんでした)。

最後の VS2010 の落とし穴:

Visual Studio 2010 を使用して公開する場合、"Publish" ビルド パッケージにより、サイトの匿名アカウントの ACL がすべてのファイルとフォルダーに対して読み取り専用に変更されますが、App_Dataフォルダーは読み取りと書き込みに変更されます。

.csprojこれは、各の下のファイルに次の設定を追加することで回避できます<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>

または、msbuild を使用している場合:

msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False

ここから便利なナゲットを見つけました:

Visual Studio 2010 展開パッケージで ACL の設定をスキップする(元のコンテンツが利用できなくなったため、WayBackMachine リンク)

于 2011-02-04T13:35:45.017 に答える
6

.deploy.cmd私の場合、発行は Visual Studio で機能しましたが、スクリプトを実行すると機能しませんでした。

で設定<UseMsdeployExe>true</UseMsdeployExe>することにより.csproj、VS が MSBuild タスクの代わりに msdeploy.exe を使用するように強制できます。次に、ログ レベルを上げると ([ツール] > [オプション] > [プロジェクトとソリューション] > [ビルドと実行] > [MSBuild プロジェクト ビルド出力の詳細度])、VS が使用するコマンド ラインを確認できます。

私の問題.deploy.cmdは次のとおりです。

  • 私の IIS ユーザーはそのサイトでしかアクセス許可を持っていなかったので?site=<SITENAME>computerName.
  • パラメータで必要でしAuthType='Basic'た。-dest:
于 2011-12-22T10:47:18.633 に答える
3

私たちはあなたと同じような問題に直面していました。

このためには、サービスでリモートエージェントサービスを開始する必要があります。IPアドレスにエラーがあったため、PC名を使用しました。したがって、PC名、ユーザー名、パスワードを使用してみてください。

于 2011-01-18T03:54:11.537 に答える
0

それが価値があるもののために。公開は私のために働いていましたが、ある日、まったく同じ問題 (401 無許可エラー) が発生しました。VS2012 を再起動すると問題が解決しました。他のすべてのソリューションを試す前に、それを試してみたかった.

于 2012-12-17T19:05:35.350 に答える