3

dirPath プロバイダーを使用して、Windows アプリケーションをリモート サーバー上の特定のパスにデプロイしようとしています。次のような構文を使用して、この同じサーバーに問題なく Web サイトを展開できます。

msdeploy.exe -verb:sync -source=iisApp=C:\SomePath -dest:authType=basic,wmsvc=MyServer,userName=MyUser,password=MyPassword,iis=MySite/MyApp -allowUntrusted

ただし、dirPath を使用して同様のコマンドを実行しようとすると、(不明な理由で) 401 Unauthorized エラーが発生します。

msdeploy.exe -verb:sync -source=dirPath=C:\SomePath -dest:authType=basic,wmsvc=MyServer,userName=MyUser,password=MyPassword,dirPath=C:\SomeRemotePath -allowUntrusted

ここで機能することがわかった唯一のことは、次のように computerName 構文の使用に切り替えることです。

msdeploy.exe -verb:sync -source=dirPath=C:\SomePath -dest:authType=basic,computerName=https://MyServer:8172/msdeploy.axd?site=MySite,userName=MyUser,password=MyPassword,dirPath=C:\SomeRemotePath -allowUntrusted

これは問題ありませんが、computerName ではサイトをクエリ文字列パラメーターとして渡す必要があり、この場合の "MySite" は実際には "既定の Web サイト" です。MSBuildファイルを使用して実際にこのコマンドラインを生成している(そしてExecステートメントで実行している)ことを考えると、ここでスペースを適切にエスケープする方法を理解することはできません。MSBuild ファイル (たとえば、Default%20Web%20Site) で %20 を指定すると、コマンドを実行する前にスペースに解決されるため、構文が無効になります。ダブル エスケープ (%、2、および 0 を個別にエスケープする、例: Default%25%32%30Web%25%32%30Site) を試みると、401 Unauthorized エラーに戻ります。

問題のある (避けられない?) サイト クエリ パラメータを必要としない場合、このコマンドで "wmsvc=[server]" を使用できる構文またはサーバー構成はありますか? または、上記の MSDeploy コマンドを実行している MSBuild Exec コマンド内で "?site=Default Web Site" を適切にエスケープする方法を教えてもらえますか?

編集:誰かがデフォルトの Web サイトの名前をスペースのない名前に変更することを提案する前に、はい、それは機能しますが、デフォルトの名前で機能する一般的なソリューションが必要なため、それを回避する方法を見つけようとしています特定のサーバー上の IIS Web サイトの。

4

1 に答える 1

1

site パラメーターをエスケープする適切な方法 (computerName 構文を使用する場合) は、curl の使用に関する別のSO 投稿から得られます。これは、% 記号を二重にしてエスケープすることです。wmsvc を使用する方法がなく、サイトをまったく指定しない場合、これでうまくいきます。

編集: The Muffin Man が指摘したように、computerName 引数全体 (Site クエリ パラメーターを含む) を引用符で囲むだけで、サイト名のトリッキーなエスケープを行う必要がなくなります。

于 2013-03-12T16:21:42.140 に答える