27

AzureWebサイトプレビューを使用して実行しているMVC4プロジェクトがあります。

私の問題は、WebサイトをAzureにデプロイしたときに、BLOBをBLOBストレージコンテナーにアップロードできないことですが、ローカルでデバッグしている場合、アップロードは正常に機能します。

これは、デプロイされたときに取得する例外とスタックトレースであり、コンテナにアップロードしようとします。

アカウント情報の有効な組み合わせが見つかりません。Microsoft.WindowsAzure.Storage.CloudStorageAccount.b__0(String err)at Microsoft.WindowsAzure.Storage.CloudStorageAccount.TryParse(String s、CloudStorageAccount&accountInformation、Action`1 error)at Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(String connectionString) MyProj.Controllers.ImageController.Upload(ImageViewModelモデル)で

具体的には、スタックトレースによると、失敗しているのは.Parseメソッドです。

BLOBストレージに接続するために使用しているコードは、紺碧のハウツードキュメントから直接引用したものです。

string connectionString = ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

繰り返しになりますが、これは開発ボックスでローカルに実行している場合は正常に機能し、問題なく正常にアップロードできます。ただし、デプロイするとこのエラーが発生し、まったく同じことを実行しようとします。

Webデプロイの公開プロセス中にstorageConnectionStringが混乱していると思いますが、これを解決する方法がわかりませんか?

4

15 に答える 15

32

必ず

1)診断に適切なプロトコルを使用しています(役割をダブルクリック->構成タブ->構成を選択-> [診断]の下で省略記号をクリック->[OK]をクリックしてみてください...エラーが発生した場合は、 httpsを使用し、接続文字列をhttpsに変更します)

2)空白は許可されていません...つまり UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1UseDevelopmentStorage=true; DevelopmentStorageProxyUri=https://127.0.0.1

(セミコロンの後のスペースに注意してください)

[設定]タブで、すべての接続文字列のhttpsと空白を確認します

- -編集 - -

「https」を入れると、実際にすべてが台無しになりました。ワーカーの役割は例外をスローし(「予期しないパケット形式が原因でHandshackが失敗しました。」)、不明と破棄の間を循環します。「https」の「s」を削除し、空白や出来上がりがないことを確認しました。

于 2013-10-16T15:47:16.703 に答える
18

CloadStorageAccountインスタンスを取得する別の方法は、これを行うことです

StorageCredentials credentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);

これは、この構文解析の問題を抱えている人に役立つはずです。

于 2014-06-30T08:20:24.263 に答える
16

ストレージ接続文字列は、ConnectionStringsセクションではなく、AppSettingsに保存します。そして、ここに実際の接続文字列を貼り付けると、役に立ちます(アカウントキーに*を付けることができます)。

于 2012-12-17T18:27:58.463 に答える
3

Sandino Di Mattiaが表明したように、それが問題の原因ではなかったと思います。SDKを2.0にアップグレードしたときに同じものがあり、APIの接続文字列パーサーは接続文字列内の空白をこれ以上許容せず、どこにも言及されていないことがわかりました。この種の変更が意図的なものである場合、私はそれを厄介な動きと呼ぶでしょう...

于 2013-04-23T12:16:14.273 に答える
3

Blob SASURLの前にプレフィックスBlobEndpoint=がないため、このエラーが発生しました。

間違ったappsettings.json

{
  "TestBlobWriter": {
    "ConnectionString": "https://test.blob.core.windows.net/test-container?sp=*&st=*&se=*&spr=*&sv=*&sr=*&sig=*",
    "ContainerName": "test-container"
  }
}

正しいappsettings.json

{
  "TestBlobWriter": {
    "ConnectionString": "BlobEndpoint=https://test.blob.core.windows.net/test-container?sp=*&st=*&se=*&spr=*&sv=*&sr=*&sig=*",
    "ContainerName": "test-container"
  }
}
于 2021-04-08T06:59:37.547 に答える
1

接続文字列の大文字と小文字も重要であることに注意してください。このエラーは、大規模なマージによってWeb.configで誰かが「AccountName」から「Accountname」に変更されたときに発生しました。正しいケーシングを使用すると、エラーが修正されました。

于 2016-08-24T16:11:20.673 に答える
0

Azureサービスからコピーされた接続文字列が貼り付けたものと同じであることが確実な場合は、読みやすくするためにキャリッジリターン/スペースを指定したかどうかを確認してください。これは、問題の原因の1つでもあります。経験豊富。@scottndeckerに+1を付けようとしましたが、15の評判がないためできませんでした。

于 2015-04-14T05:05:06.573 に答える
0

proxyUriを使用するときは、「https://」または「https://」を含めることを忘れないでください。好き:

UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1

于 2017-12-17T23:04:17.977 に答える
0

文字列の最後に誤って改行文字(\ r \ n)を追加したため、これを取得しました。

于 2018-01-12T14:48:54.503 に答える
0

私は同じ問題に直面していました。名前空間を使用Microsoft.WindowsAzure.Storageし、接続文字列に余分なスペースがないことを確認する必要があります。

于 2018-09-19T10:34:36.047 に答える
0

間違ったnugetパッケージを使用したためにこのエラーが発生しました(ドットネット4.6.1を使用しています)

間違ったパッケージは次のとおりです:WindowsAzureStorage.Helper

正しいパッケージは次のとおりです。WindowsAzure.Storage

名前空間を使用していることを確認してください:using Microsoft.WindowsAzure.Storage;

于 2019-03-19T12:47:22.710 に答える
0

@ Microsoft.KeyVault(SecretUri = https ...)を使用して、ストレージ接続文字列をアプリ設定リテラルからキーボールト参照に移行したときにこのエラーが発生しました。新しい関数アプリを作成し、システム割り当てをオンにするのを忘れていました。 IDを取得し、アプリにkeyvaultへのアクセス権を付与します。したがって、症状は未定義のアプリ設定値、つまりストレージ接続の試行の失敗でした。

于 2019-05-16T05:19:01.780 に答える
0

私の問題の解決策を共有します。かっこはそのままにして、かっこ内に情報を入力する必要があると思っていました。ブラケットを取り外した後、私の問題は解決しました。

から:

string eventHubName = "{Event Hub name}";

に:

string eventHubName = "Event Hub name";

同じことが:eventHubConnectionString、storageAccountName、storageAccountKeyにも当てはまります

于 2019-08-01T13:47:15.160 に答える
0

Azureでこの問題を解決するには、デフォルトの文字列を使用せずに、次のような最小限のバージョンを使用します。

<add name="StorageConnection" 
    connectionString="DefaultEndpointsProtocol=https;AccountName=name;AccountKey=yourkey;EndpointSuffix=core.windows.net" />

空白や改行なし!!

于 2021-02-24T10:08:31.517 に答える
-1

同じ問題が発生し、名前空間で見つかりました。CloudStorageAccountクラスは両方の名前空間に存在します

using Microsoft.WindowsAzure;

using Microsoft.WindowsAzure.Storage;

WindowsAzureそのため、名前空間を削除WindowsAzure.Storageしてコードに追加しました。

以前のコード:

using Microsoft.WindowsAzure;

修正されたコード:

using Microsoft.WindowsAzure.Storage;
于 2018-08-10T05:33:37.903 に答える