10

WindowsAzure.StorageClient 1.7 から WindowsAzure.Storage 2.0 に移行しています。現在、例外の管理に取り組んでいます。このガイドと他のソースに従って、私はから移行する必要があることがわかりました

try
{
    // Something
}
catch (StorageClientException e)
{
    switch (e.ErrorCode)
    {
        case StorageErrorCode.ContainerNotFound:
        case StorageErrorCode.ResourceNotFound:
        case StorageErrorCode.BlobNotFound:
        case StorageErrorCode.ConditionFailed:
            // Do something
    }
}

try
{
    // Something
}
catch (StorageException e)
{
    switch (e.RequestInformation.ExtendedErrorInformation.ErrorCode)
    {
        case StorageErrorCodeStrings.ContainerNotFound:
        case StorageErrorCodeStrings.ResourceNotFound:
        case BlobErrorCodeStrings.BlobNotFound:
        case StorageErrorCodeStrings.ConditionNotMet:
            // Do something
    }
}

シンプルに見えます。問題は、ExtendedErrorInformation が常に null に等しいことです。代わりに、HttpStatusMessage は「指定された blob が存在しません。」と言うはずです。

テスト環境のシミュレーターが原因かと思っていましたが、実際の Azure 環境で試してみると同じ状況に陥りました。

何か案が?

4

3 に答える 3

8

別のオプションは、RequestInformation.HttpStatusCode代わりに を調べることです。これはとにかく信頼性が高いようです。コードはかなり簡単に次のように変換されます。

try
{
    // Something
}
catch (StorageException e)
{
    switch (e.RequestInformation.HttpStatusCode)
    {
        case (int)HttpStatusCode.NotFound:
        case (int)HttpStatusCode.PreconditionFailed:
        // Do something
    }
}
于 2013-01-17T15:56:46.747 に答える
3

実際に試してみたところ、ExtendedErrorInformation オブジェクトが null であることに驚きました。ただし、常に null とは限りません。たとえば、blobContainer.Create() メソッドを使用して既に存在する BLOB コンテナーを作成しようとすると、null 以外の ExtendedErrorInformation が返されます。ただし、ブロブ コンテナーに存在しないブロブの属性を取得しようとすると、null の ExtendedErrorInformation オブジェクトが返されます。ExtendedErrorInformation オブジェクトが常に利用可能であると仮定することはできないと思います。

また、2.0 のコードで、StorageErrorCodeStrings を使用していることにも気付きました。これは 2.0 から削除され、バージョン 1.8 以前でのみ使用できることに注意してください。私はそれを言及すべきだと思った

更新: @VollmonD からの以下のコメントを参照してください。これはバージョン 2.0.3 で追加されました。

于 2013-01-16T17:31:07.330 に答える