開発ファブリックで SSL を機能させる際に問題が発生しています。Visual Studio 2012 Ultimate と 2012 年 10 月の Azure SDK for .NET を使用して、Windows 8 Pro のクリーン インストールを実行しています。IIS8 はインストールされておらず、HTTPS をサポートしていると主張する IIS Express のみがインストールされているため、それが問題ではないことを願っています。
管理者として VS 12 を実行し、空の VS ソリューションを作成し、新しい ASP.NET MVC 4 インターネット Web アプリケーション プロジェクトを使用して新しい (.NET 4.5) クラウド サービスを追加し、F5 キーを押しました。すべて正常に動作します。次に、SSL 証明書を Web ロールに追加し、HTTP エンドポイント (ポート 80) を HTTPS エンドポイント (ポート 443、証明書付き) に置き換えると、F5 キーを押すと次のエラー メッセージが生成されます。
Microsoft Visual Studio 用 Windows Azure ツール
プロセス ID: 4892 のロール インスタンス 'deployment18(32).WindowsAzureCloudService.Mvc4WebRole_IN_0' にデバッガーをアタッチする際にエラーが発生しました。添付できません。アクセスが拒否されました。
最後の部分 (「アクセスが拒否されました」) にはいくつかのバリエーションがありますが、特に喜ばしいのは「壊滅的な障害」です。:)
VS 出力ウィンドウ (「一般」出力) の唯一のメッセージは次のとおりです。
Windows Azure Tools: 警告: エミュレーション中の競合を避けるために、ロール 'Mvc4WebRole' のプライベート ポート 443 を 444 に再マッピングしています。
Compute Emulator UI はあまり役に立ちません。インスタンスが消える直前に、これが一貫して得られる唯一のコンソール出力です (他のメッセージが表示されることもありますが、いくつかの実行ごとに散発的に表示されます。これらをキャプチャする方法がわかりません)。
[ファブリック] ロール インスタンス: deployment18(33).WindowsAzureCloudService.Mvc4WebRole.0
[fabric] 役割状態不明
[fabric] 役割の状態 Suspended
[fabric] 役割状態 Busy
[ファブリック] 役割状態 不健康
[fabric] 役割の状態 停止
証明書は CA から取得され、ローカル マシン/個人/証明書ストアに秘密キー、拡張プロパティ、およびエクスポート可能としてマークされた .pfx として適切にインポートされました。
サービスを Azure に発行しようとすると、データベース接続文字列に関するビルド (検証) 警告が 1 つ表示されます (これは無関係だと思います)。
接続文字列 'DefaultConnection' は、プロジェクト 'Mvc4WebRole' のローカル データベース '(LocalDb)\v11.0' を使用しています。この接続文字列は、Windows Azure でこのアプリケーションを実行すると機能しません。別のデータベースにアクセスするには、web.config ファイルの接続文字列を更新する必要があります。
おそらくもっと重要なのは、展開が実際に失敗し、Windows Azure アクティビティ ログ ウィンドウに次の履歴が表示されることです。
9:00:25 AM - 警告: パッケージ検証の警告があります。
午前 9:00:25 - WindowsAzureCloudService の展開の準備 - 2013 年 1 月 3 日 午前 8:59:55、サービス管理 URL 'https://management.core.windows.net/ '...
午前 9:00:25 - 接続中...
9:00:26 AM - オブジェクト参照がオブジェクトのインスタンスに設定されていません。
9:00:26 AM - 致命的なエラーでデプロイが失敗しました
誰かがこの問題のトラブルシューティングを手伝ってくれますか? 何度か再起動しました。;)
前もって感謝します!
編集 (1 月 3 日午後 4 時 44 分):前進するのに役立つアイデアがいくつかありますが、かなり抜本的なものもあるので、アドバイスをいただければ幸いです。
Compute Emulator (Dev Fabric) からのすべての出力をログ ファイルにキャプチャして確認できるようにする方法はありますか? (私のサービスから System.Diagnostic.Trace を呼び出しても役に立ちません。なぜなら、HTTPS を使用している場合は RoleEntryPoint まで到達できないからです!)私はこれを理解しました。次の編集を参照してください。- Azure の展開中のその null ポインター例外は、私を心配させます。Azure SDK を再インストールしてみる価値はありますか? もしそうなら、どうすればクリーン インストールを行うことができますか?
- エミュレータに完全な IIS を使用するように切り替えると、この種の問題が消えるのを見た人はいますか? (IIS と IIS Express はAzure の展開とは関係がないため、これはありそうにありません。)
編集 (1 月 4 日午前 10 時 15 分):悪いニュース: 証明書への読み取りアクセスを許可する提案を試みましたが、私の場合は役に立ちませんでした。朗報: Compute Emulator UI がシャットダウンする前に、散発的なメッセージの 1 つをキャプチャすることができました。それはいくつかの診断からのちょっとした情報でした。それ自体は役に立ちませんが、開発ファブリックが一時ファイルを保存している場所を明らかにしました。
[診断] 情報: C:\Users\Lars\AppData\Local\dftmp\Resources\0005155d-4592-40f4-812e-18793b26576c\directory\DiagnosticStore\Monitor
GUID 部分は展開ごとに再作成され、展開がなくなると削除されます (私の場合はいつもそうです)。ただし、親ディレクトリ (「dftmp」) には、新しい展開中に監視したいくつかの役立つディレクトリがあります: DevFCLogs、DFAgentLogs、および IISConfiguratorLogs です。昨日の最初の質問はこれで解決したと思います。:)
DFAgentLogs\DFAgent.log: (41KB)有用な情報はありません。一連の「パイプの読み取りに失敗しました」メッセージと、ロール/デプロイ インスタンス ID の取得に失敗しました。これは単なるノイズだと思います。
DevFCLogs\DevFabric--2013.01.04--<...>.log: (510 KB)有用な情報はありません。私はファイルをざっと見て、「エラー」、「失敗」、「見つかりません」、「証明書」、および「Mvc4WebRole_IN_0」も検索しました。それらのどれも、何が起こっているのかについてのヒントを示していませんでした。
IISConfiguratorLogs\IISConfigurator.log: (6 KB)進行中です!! :) 誰かがこれが何を意味するのか教えてもらえますか? (それまでの間、私は ILSpy ハンティングから離れています...楽しい楽しい...)
IISConfigurator 情報: 0 : [00006356:00000005, 2013/01/04 16:07:08.915] IIS Express appdomain の使用
(...)
IISConfigurator 情報: 0 : [00006356:00000005, 2013/01/04 16:07:08.936] バインディング 127.255.0.0:444 を追加しています: へのサイト deployment18(40).WindowsAzureCloudService.Mvc4WebRole_IN_0_Web
IISConfigurator 情報: 0: [00006356:00000005、2013/01/04 16:07:10.484] キャッチされた例外
IISConfigurator 情報: 0: [00006356:00000005、2013/01/04 16:07:10.487] Exception:System.Runtime.InteropServices.COMException (0x800401F3): 無効なクラス文字列 (HRESULT からの例外: 0x800401F3 (CO_E_CLASSSTRING))
サーバー スタック トレース:
Microsoft.Web.Administration.Interop.IAppHostProperty.get_Value() で
Microsoft.Web.Administration.ConfigurationElement.GetPropertyValue (IAppHostProperty プロパティ) で
Microsoft.Web.Administration.Binding.get_CertificateHash() で
Microsoft.Web.Administration.BindingCollection.Add (バインディング バインディング) で
Microsoft.WindowsAzure.ServiceRuntime.IISConfigurator.WasManager.DeploySite (文字列 roleId、WASite roleSite、文字列 appPoolName、文字列 sitePath、文字列 iisLogsRootFolder、文字列 failedRequestLogsRootFolder、リスト
1 bindings, List
1 プロトコル、FileManager fileManager、WAAppPool defaultAppPoolSettings、文字列 roleGuid、文字列 & appPoolSid、List`1 でappPoolsAdded、文字列 configPath)
編集 (1 月 4 日午前 11 時): ILSpy はあまり役に立ちませんでした。バインディングを設定するために証明書のハッシュを取得しようとしているときに、相互運用ポイントで例外がスローされます (これは既にわかっています)。Microsoft.Web.Administration でバインディングの証明書ハッシュを取得するために、どの COM オブジェクトを登録する必要があるか知っている人はいますか? または、相互運用呼び出しを傍受して確認するにはどうすればよいですか? そもそもなぜこれが起こっているのか教えていただければボーナスポイント。:)