Azure Web サイトで Azure Management Libraries を使おうとすると、X509Certificate2 の作成時に必ずエラーになってしまいました。使った初期化コードは以下の記事と同じものになります。
Windows Azure Web サイトで国際化ドメイン名を使ってみた - しばやん雑記
自分が試した時にはエラーメッセージは以下のような感じでした。フラグによっては Access Denied が出たりもするみたいです。
ぶっちゃけローカルでは動いていた証明書が、Azure Web サイトに持っていっただけでエラーになるので困りました。仕方ないので先人の知恵に頼ろうと思ったのですが、割とみんな苦戦しているようです。
http://blog.tylerdoerksen.com/2013/08/23/pfx-certificate-files-and-windows-azure-websites/
http://www.bradygaster.com/post/using-publish-settings-files-to-authenticate-the-management-libraries
その中でも MSDN Forum に投稿された以下の記事が参考になりました。
どうやら Azure からダウンロードできる publishsettings ファイルに含まれている証明書だとダメみたいです。ローカルにインストールされた何かを参照する必要があるみたいでした(知らんけど
なので、オレオレな証明書を作って管理ポータルから登録すれば使えるようになります。手順は兄者のブログが参考になるので、これをそのまま行うだけで大丈夫です。
Windows Azure SDK for .NET の Management Library を利用して Webサイト を動的に作成してみる - normalian blog
結局、X509Certificate2 を作る部分のコードは以下のようにしました。Base64Certificate は作成したオレオレ証明書で、エクスポート時にパスフレーズを入力した場合にはそれを指定してください。
var credentials = new CertificateCloudCredentials(SubscriptionId, new X509Certificate2( Convert.FromBase64String(Base64Certificate), "p@ssw0rd", X509KeyStorageFlags.MachineKeySet));
これで再度デプロイを行うと、正常に Management Libraries を使ったコードが実行できるはずです。
関係ないですが、Web サイト用の GetInstanceIds API はマジ面白いと思うので、何か使い道を考えてみたいと思いました。