2012-04-20 13 views
5

現在、Windows Azure用のホストされたサービスの自動展開プロセスを進めています。 .cspkg.cscfgファイルの作成は、msbuildへの呼び出しを使用して完全に機能します。今は管理用REST APIを使用してこれらのファイルをAzureにデプロイする小さな.NETコンソールアプリケーションを作成しています。管理REST API(SSL証明書の問題)を使用してAzureの展開をアップグレードできません。

API自体に問題はありません。私は自分の管理証明書を使ってAPIにリクエストを送ることができます。 .cspkgファイルをAzure BLOBストレージにアップロードしてから、Upgrade Deploymentに電話してみます。しかし、私が試すたびに、拇印xyの証明書が見つからないという「400 Bad Request」という応答が出ます。この証明書は、私のカスタムドメイン(DNS CNAME)用にHTTPS用に使用しているSSL証明書(ではなく、管理証明書)です。

そして今、全部が面白い:私は私のVisual Studioで「公開」コマンドを使用してファイルを展開するときに

、問題はありません。 (私はVSからの.cscfg/.cspkgファイルと私のmsbuild出力からのファイルを比較しました:いくつかのGUIDを除いて、それらは同じです)。さらに、ブラウザでSilverlight Managementの機能を使用すると、APIを使用してアップロードできなかった生成ファイルをアップロードすることもできます。

List Certificatesコールを使用してすべての証明書のリストを取得すると、欠落していると思われる証明書が存在するようです。また、Get Certificateコールを使用してデータを取得することもできます。

なぜAzureは、Upgrade Deploymentコールを使用しているときに証明書が見つからなかったと伝え続けていますか?誰かが同様のことを経験しましたか?誰もが私のヒントはありますか?前もって感謝します。

<Error xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Code>BadRequest</Code> 
    <Message>The certitficate with thumbprint 7b232c4a2d6e3deadbeef120d5dbc1fe8049fbea was not found.</Message> 
</Error> 

がP.P.S:はい、応答内の単語がcertitficate、ないcertificateです:

P.S:これは私がAPIを使用する際のAzureが言うことです。

答えて

4

OK、List Subscription Operations API呼び出しを使用して、Visual Studioがアプリケーションをデプロイするために呼び出す呼び出しを見つけた後、私は解決策を見つけました。私はlousilyそのAzure Management APIを文書化するために、マイクロソフトを非難、すべての原因に関して:

は、私はAPIリクエストのために使用されたURLが間違っていたことが判明しけど。

https://management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deploymentslots/<deployment-slot>/?comp=upgrade

説明は以下の通りである:彼らのドキュメントで

、彼らが使用するURLは書き込み

は、リクエストURIを生成<サブスクリプションIDを交換するには>サービス名が<のサービス名>、<デプロイメントスロット>、ステージングまたはプロダクション、<デプロイメントの一意の名前を持つデプロイメント名>。彼らは、あなたがに持っていることをあなたのサービスのをDNS名を使用している言及を忘れてしまった何

、およびない名前!サービス名が無効であるか、存在しないか、サブスクリプションIDに属していないというエラーメッセージが表示されることがあります。

マイクロソフト社にありがとう、2日以上かかる。

+0

好奇心が強いですが、あなたのサービスの名前は何と思いましたか?プライベートIDとデプロイメント名はどちらもGUID値です。 Hosted Service nameは実際のDNS値です(常に小文字になります)。他の名前は何ですか(ラベル?)。 UpgradeDeploymentを使用する場合、デプロイメント名(guid)が必要です。そうしないと、* BySlotを使用して特定のスロットをポイントできます。 – dunnry

+0

サービスの名前は、プライベートIDまたは展開名とは関係ありません。これらは* deployment *を指し、新しいデプロイメントを作成するたびに変更されます。しかし、ドキュメントでわかるように、GUIDを使用して識別できる展開または展開スロットをアップグレードする場合でも、APIにはサービス名が必要です。URIにオプションの部分がないという事実を考えれば、自分の答えで指定したURIパターンから推測することもできます。私の[screenshot](http://dl.dropbox.com/u/17554533/azure.png)を見て、 "サービス名"と "DNS名"が私に何を意味するのかを確認してください。 – fero

+0

私はあなたが使用しようとしていた名前と唯一の可能な組み合わせの概要を尋ねていました。私はポータルが紛らわしいと思う。幸いにも、あなたはいつも入力を駆動するためにAPI出力を使用することができ、推測する必要はありません。 – dunnry

0

エラーは、その証明書をホストされているサービスのシークレットストアにアップロードしていないことを示します。 Visual Studioは自動的にそれを行うかもしれませんが、プログラムでそれを複製する場合は、Add Certificate API呼び出しを使用して、PFXをデプロイメントにアップロードしてください。

+0

証明書は常に存在します。私の質問では、 'List Certificates'コールがそれを示したと書きました。実際の問題については、自分の答えを見てください。 – fero

+0

あなたは偽のホストされたサービス名でアップグレード展開を呼び出して、このエラーを得ることができます(下記の回答から)。 – dunnry

0

「400 BadRequest - 拇印XYZの証明書が見つかりませんでした」と表示されます。 (私はデバッグ)次の理由CreateDeploymentまたはUpgradeDeploymentシナリオに表示されます:

  1. あなたが、例えばのために行うとしてあなたはサブスクリプション管理に同じ証明書を使用ホストされているサービスでのSSLまたはリモートデスクトップパスワードの暗号化。したがって、拇印XYZの証明書を使用して、デプロイメントを作成するサービス管理REST呼び出しを認証します。
  2. それは証明書がまだに追加されていないことなど
  3. リモートデスクトップ/ SSLを設定する必要があるため、その拇印によって同じCERTは、 certsのサービスをホストされていることを参照して、あなたのCSCFGに渡しデプロイメントパラメータを指定します。

この場合は400不正な要求エラーは本当にあなたのCSCFGに証明書がまだあなたのホストサービスに添付されていないので、あなたが、不正な要求を持っていることを伝えるです。 401を取得していなくても、多目的証明書であるため、エラーメッセージが要求の認証を参照していると誤解しているため、混乱が生じます。

関連する問題