私は最近、Azure 2.1 SDKにアップグレードしました。計算エミュレータで実行しているときに私のweb.config
の一部に問題が発生しました。私web.config
はこれを含んでいますappcmd.exeのロック解除設定がAzureエミュレータで機能しないのはなぜですか?
<location path="api">
<system.webServer>
<security>
<access sslFlags="Ssl, SslRequireCert, SslNegotiateCert" />
</security>
</system.webServer>
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
/api/
パスの下のすべてがHTTPSを介してクライアント側の証明書を提供することにより、認証するためにクライアントが必要なので、私はこれを必要とします。
既定では、<access>
要素がsystem.webServer/security
の下にある既定でロックされています。あなたが500.19エラーになるだろう、それがなければ
SET APPCMD=%windir%\system32\inetsrv\appcmd.exe
IF EXIST APPCMD GOTO :INUSUALPLACE
SET APPCMD="%ProgramFiles%\IIS Express\appcmd.exe"
:INUSUALPLACE
%APPCMD% unlock config /section:system.webServer/security/access
:だから私はいつもこれが含まれているスタートアップタスクを持っていました。最近まで、この起動タスクは常にエラーを防ぎ、SSL設定を有効にしました。
しかし、これはもう機能しません。私が知る限り、これは2.1 SDKに切り替えたときに起こりました。このWebロールの他のすべては途中で機能します。SSLコンフィグレーションの設定が適用される/api/
パスのサービスにアクセスしようとするとエラーが発生します。それは500.19です。 (500はもちろん「内部サーバーエラー」ですが、.19は構成エラーであることを示しています)。
この構成セクションのロックを解除しようとする試みはもはや機能していません。私が言うのは、Azureエミュレータが(C:\Users\<user>\AppData\Local\dftmp\Resources\<some random guid>\temp\temp\RoleTemp
に)作成したapplicationHost.config
ファイルで、のsecurity
要素のDeny
を置き換えて手動で編集すると、エラーが表示されなくなり、正常に使用できます。クライアント証明書を必要とするサービス
これは回避策としては使用できません。このapplicationHost.config
は、エミュレータでアプリを実行するたびに再生成されます(正確な場所は毎回変更されます)。私はアプリケーションをローカルでデバッグするたびに自動的にこの設定セクションのロックを確実に解除する方法が必要です。それはappcmd.exe
のことですが、動作を停止したようです。
Azure SDKがIIS Expressを使用していても、IISのバージョンがappcmd.exe
であることが問題になっている可能性があります。私は彼らが別のプログラムかどうか分からないので、スタートアップコマンドの最後にこれを追加しようとしました。
"%ProgramFiles%\IIS Express\appcmd.exe" unlock config /section:system.webServer/security/access
これは明示的にIIS Expressのコピーを実行します。しかし、それは何の違いもないようです。
誰かが尋ねる前に、起動タスクが確実に実行されています。これは私のEnableClientCerts.cmd
(appcmd.exe
を呼び出すスクリプト)がエラーなしで実行されたことを示し
[00025156:00018324, 2013/08/30, 22:15:03.033, INFO ] Executing Startup Task type=0 rolemodule=(null) cmd="c:\dev\mm\DevInt\src\Mm.Cloud\csx\Debug\roles\Mm.Web\approot\bin\Startup\EnableClientCerts.cmd"
[00025156:00018324, 2013/08/30, 22:15:03.034, INFO ] Executing "c:\dev\mm\DevInt\src\Mm.Cloud\csx\Debug\roles\Mm.Web\approot\bin\Startup\EnableClientCerts.cmd" .
[00025156:00018324, 2013/08/30, 22:15:03.221, INFO ] Program "c:\dev\mm\DevInt\src\Mm.Cloud\csx\Debug\roles\Mm.Web\approot\bin\Startup\EnableClientCerts.cmd" exited with 0. Working Directory = c:\dev\mm\DevInt\src\Mm.Cloud\csx\Debug\roles\Mm.Web\approot\bin
:これらの行をapplicationHost.config
と同じフォルダに、私はWaHostBootstrapper.log
ファイルを参照してください、そして、それは(とりわけ)が含まれています。
appcmd.exe
は、どの特定のWebサイトが設定されているのかが分かりません。いくつかあります - 私はこのボックスに適切なIISを持っており、Azureに関連しないIIS Expressサイトも設定されています。正しいターゲットを設定できない可能性はありますか?
また、私はWaHostBootstrapper.log
に誤りのこの種のいくつかを参照してください。
[00025156:00018324, 2013/08/30, 22:15:03.033, ERROR] <- WapGetEnvironmentVariable=0x800700cb
ことが関係していませんか?
設定セクションのロックを解除するスクリプトに何か不足がありますか?
変数がクラウド内に存在するのか、エミュレータ内にのみ存在するのか知っていますか? – Vertigo
それは雲の中にあるようです - このスクリプトはエミュレータとクラウドの両方で機能します。しかしそれはそれが文書化されていないので私に関係している。 –
私はこの "前提条件"に終わった:定義されていない場合APPCMD SET APPCMD =%SystemRoot%\ system32 \ inetsrv \ AppCmd.exe – Vertigo