1

これはバグだと思い始めていますが、よくわかりません。これが私の状況です。

セットアップ情報

Azure Storage Blobへのアップロードを許可するWebサイトがあり、エンドポイントはWeb構成で指定されています。基本Web構成には次のものが含まれます

<blobEndpoint value="http://127.0.0.1:10000/devstoreaccount1" />

また、テストサーバーのWeb構成には

<blobEndpoint value="https://myazureaccount.blob.core.windows.net" xdt:Transform="Replace" />

Web構成から値を取得するためのカスタム構成ハンドラーがあります。

[ConfigurationProperty("blobEndpoint", IsRequired = true)]
public StringConfigurationElement BlobEndpoint
{
    get
    {
        return (StringConfigurationElement)base["blobEndpoint"];
    }
    set
    {
        base["blobEndpoint"] = value;
    }
}

このようなストレージアカウントへの参照を取得します

StorageCredentialsAccountAndKey credentials = 
     new StorageCredentialsAccountAndKey(
                     CloudStorageAccount.CloudStorageAccountName,
                     CloudStorageAccount.CloudStorageAccountKey);

this.cloudStorageAccount = new CloudStorageAccount(credentials, 
                     CloudStorageAccount.BlobEndpoint, 
                     CloudStorageAccount.QueueEndpoint, 
                     CloudStorageAccount.TableEndpoint);

次に、このようなクラウドBLOBクライアントへの参照を取得します

this.cloudBlobClient = this.cloudStorageAccount.CreateCloudBlobClient();

手元の問題

これは私が異なる結果を得始めるところです。

ストレージエミュレータエンドポイント(http://127.0.0.1:10000/devstoreaccount1)を使用してこの呼び出しを行う場合

this.cloudBlobClient.BaseUri

戻り値はhttp://127.0.0.1:10000/devstoreaccount1

ただし、実際のアカウントエンドポイント(https://myazureaccount.blob.core.windows.net)を使用して同じ呼び出しを行うと、戻り値は。になりますhttps://myazureaccount.blob.core.windows.net/

最後に末尾のスラッシュがあることに注意してください。ストレージエミュレータuriを使用しているときに、なぜそれが存在しないのですか?または、実際のアカウントURIを使用しているときになぜ存在するのですか?

アップデート

Web構成設定からURIを更新する手順を実行しました。これは、各ケースの出力でした。

{https://myazureaccount.blob.core.windows.net/}
    AbsolutePath: "/"
    AbsoluteUri: "https://myazureaccount.blob.core.windows.net/"
    Authority: "myazureaccount.blob.core.windows.net"
    DnsSafeHost: "myazureaccount.blob.core.windows.net"
    Fragment: ""
    Host: "myazureaccount.blob.core.windows.net"
    HostNameType: Dns
    IsAbsoluteUri: true
    IsDefaultPort: true
    IsFile: false
    IsLoopback: false
    IsUnc: false
    LocalPath: "/"
    OriginalString: "https://myazureaccount.blob.core.windows.net"
    PathAndQuery: "/"
    Port: 443
    Query: ""
    Scheme: "https"
    Segments: {string[1]}
    UserEscaped: false
    UserInfo: ""


{http://127.0.0.1:10000/devstoreaccount1}
    AbsolutePath: "/devstoreaccount1"
    AbsoluteUri: "http://127.0.0.1:10000/devstoreaccount1"
    Authority: "127.0.0.1:10000"
    DnsSafeHost: "127.0.0.1"
    Fragment: ""
    Host: "127.0.0.1"
    HostNameType: IPv4
    IsAbsoluteUri: true
    IsDefaultPort: false
    IsFile: false
    IsLoopback: true
    IsUnc: false
    LocalPath: "/devstoreaccount1"
    OriginalString: "http://127.0.0.1:10000/devstoreaccount1"
    PathAndQuery: "/devstoreaccount1"
    Port: 10000
    Query: ""
    Scheme: "http"
    Segments: {string[2]}
    UserEscaped: false
    UserInfo: ""

そして、これは実際にはUriクラスの問題であり、とは関係がないようCloudBlobClientです。タグを適切に更新しました。

4

1 に答える 1

1

それを引き起こす可能性がある唯一のもののように聞こえます

PathAndQuery: "/"

それを取り除くと、物事はうまくいくはずです。URI Classまた、URIクラスをテストする必要がある場合は、正しいホストが返されるかどうかをテストするために、将来的に多くの時間と頭痛の種を節約できる、非常に迅速なものを作成しました。

var uriList = new List<string>()
    {
        "https://myazureaccount.blob.core.windows.net",
        "https://myazureaccount1.blob.core.windows.net",
        "https://myazureaccount2.blob.core.windows.net"
    };

var holdList = uriList.Select(uriName => new Uri(uriName)).Select(uri => uri.Host).ToList();
于 2013-03-26T21:31:23.483 に答える