Azure Webサイトのプレビューを使用して実行しているMVC4プロジェクトがあります。
私の問題は、WebサイトをAzureに展開したときにblobストレージコンテナーにblobをアップロードできないことですが、ローカルでデバッグしているときにアップロードは正常に機能します。
これは、デプロイ時に取得する例外とスタックトレースであり、コンテナーにアップロードしようとします。
アカウント情報の有効な組み合わせが見つかりませんでした。 Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(String connectionString)でMicrosoft.WindowsAzure.Storage.CloudStorageAccount.TryParse(String s、CloudStorageAccount&accountInformation、Action`1 error)でMicrosoft.WindowsAzure.Storage.CloudStorageAccount.Parse(String err)にMyProj.Controllers.ImageController.Upload(ImageViewModelモデル)
具体的には、スタックトレースのとおり、失敗しているのは.Parseメソッドです。
Blobストレージに接続するために使用しているコードは、Azureのハウツードキュメントから直接です。
string connectionString = ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
繰り返しますが、ローカルで開発ボックスで実行している場合、これは問題なく機能し、問題なくアップロードできます。ただし、展開するとこのエラーが発生し、まったく同じことを実行しようとします。
StorageDeployStringがWeb配置の発行プロセス中に混乱していると思いますが、これを解決する方法がわかりません。
ストレージ接続文字列は、ConnectionStringsセクションではなくAppSettingsに保存します。また、実際の接続文字列をここに貼り付けると、助けになります(アカウントキーに*を入力できます)。
必ず
1)診断に適切なプロトコルを使用している(役割->構成タブをダブルクリック->構成を選択-> [診断]の下の省略記号をクリック-> [OK]をクリックしてください... httpsを使用し、接続文字列をhttpsに変更します)
そして
2)空白は許可されません... UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1
の代わりに UseDevelopmentStorage=true; DevelopmentStorageProxyUri=https://127.0.0.1
(セミコロンの後のスペースに注意)
[設定]タブのすべての接続文字列にhttpsと空白があるかどうかを確認します
---編集----
「https」を入れると、実際にすべてが台無しになりました。ワーカーロールは例外をスローし(「予期しないパケット形式が原因でHandshackが失敗しました。」)、不明と破棄の間を循環します。 「https」の「s」を削除し、空白や出来上がりがないことを確認しました。
CloadStorageAccountインスタンスを取得する別の方法はこれを行うことです
StorageCredentials credentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
これは、この解析の問題を抱えているすべての人を助けるはずです。
Sandino Di Mattiaが表明したように、それは問題の原因ではなかったと思います。 SDKを2.0にアップグレードしたときにも同じものがあり、APIの接続文字列パーサーが接続文字列内の空白を許容しないため、どこにも言及されていませんでした。この種の変更が意図的なものだったとしたら、私はそれを厄介な動きと呼んでいます...
また、接続文字列の大文字小文字が重要であることにも注意してください。大規模なマージによってWeb.configで誰かが「アカウント名」を「アカウント名」に変更する前に、このエラーが発生しました。正しいケースを使用してエラーを修正しました。
文字列の末尾に改行文字(\ r\n)を誤って追加したため、これがわかりました。
@ Microsoft.KeyVault(SecretUri = https ...)を使用してストレージ接続文字列をアプリ設定リテラルからKeyVault参照に移行したときに、このエラーが発生しました。新しい関数アプリを作成し、システム割り当てをオンにするのを忘れていました。 IDとアプリにkeyvaultへのアクセス権を与えます。したがって、症状は未定義のアプリ設定値、つまりストレージ接続の試行の失敗でした。
Azureサービスからコピーした接続文字列が貼り付けたものと同じであることを確信している場合は、読みやすくするためにキャリッジリターン/スペースを指定しているかどうかを確認してください。これも、問題の原因の1つです。経験した。 @scottndeckerに+1を付けようとしましたが、15の評判がないため、できませんでした。
私の問題の解決策を共有します。かっこはそのままにして、かっこ内の情報を入力する必要があると考えていました。ブラケットを外した後、私の問題は解決しました。
から:
string eventHubName = "{Event Hub name}";
に:
string eventHubName = "Event Hub name";
同じことが言えます:eventHubConnectionString、storageAccountName、storageAccountKey
ProxyUriを使用する場合は、「https://」または「https://」を含めることを忘れないでください。お気に入り:
UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1
私は同じ問題に直面していました。 Microsoft.WindowsAzure.Storage
名前空間を使用し、接続文字列に余分なスペースがないことを確認する必要があります。
間違ったnugetパッケージを使用したため、このエラーが発生しました(ドットネット4.6.1を使用しています)。
間違ったパッケージは次のとおりです:WindowsAzureStorage.Helper
正しいパッケージは次のとおりです:WindowsAzure.Storage
そして、名前空間を使用していることを確認してください:using Microsoft.WindowsAzure.Storage;