3

次のコードでファイルをアップロードしようとすると、次の例外が発生します。

            string encodedUrl = "videos/Sample.mp4"
            CloudBlockBlob encodedVideoBlob = blobClient.GetBlockBlobReference(encodedUrl);
            Log(string.Format("Got blob reference for {0}", encodedUrl), EventLogEntryType.Information);
            encodedVideoBlob.Properties.ContentType = contentType;
            encodedVideoBlob.Metadata[BlobProperty.Description] = description;
            encodedVideoBlob.UploadFile(localEncodedBlobPath);

「ブロブ参照を取得しました」というメッセージが表示されるので、参照は正しく解決されていると思います。

Void Run() C:\Inter\Projects\PoC\WorkerRole\WorkerRole.cs (40)
System.ArgumentNullException: Value cannot be null.
Parameter name: value
   at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()
   at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait()
   at Microsoft.WindowsAzure.StorageClient.CloudBlob.UploadFromStream(Stream source, BlobRequestOptions options)
   at Microsoft.WindowsAzure.StorageClient.CloudBlob.UploadFile(String fileName, BlobRequestOptions options)
   at EncoderWorkerRole.WorkerRole.ProcessJobOutput(IJob job, String videoBlobToEncodeUrl) in C:\Inter\Projects\PoC\WorkerRole\WorkerRole.cs:line 144
   at EncoderWorkerRole.WorkerRole.Run() in C:\Inter\Projects\PoC\WorkerRole\WorkerRole.cs:line 40

興味深いことに、オンプレミス サーバー、つまり Azure の外部から同じスニペットを実行していますが、正しく動作しています。

アイデア歓迎、ありがとう!

4

1 に答える 1

8

犯人を見つけた!

基本的に、問題はこの行にありました

encodeVideoBlob.Metadata[BlobProperty.Description]=説明;

nullまたは空のメタデータが設定されていないことを確認するチェックがあります。Reflectorから分解し、ArgumentNullExceptionオカレンスを検索して見つけました。

より意味のある例外をキャッチしてスタックに再スローするのは素晴らしいことかもしれません:-)

興味深い方法は次のとおりです。

internal static void AddMetadata(HttpWebRequest request, NameValueCollection metadata)
{
    if (metadata != null)
    {
        foreach (string str in metadata.AllKeys)
        {
            AddMetadata(request, str, metadata[str]);
        }
    }
}

internal static void AddMetadata(HttpWebRequest request, string name, string value)
{
    CommonUtils.AssertNotNullOrEmpty("value", value);
    request.Headers.Add("x-ms-meta-" + name, value);
}


internal static void AssertNotNullOrEmpty(string paramName, string value)
{
    AssertNotNull(paramName, value);
    if (string.IsNullOrEmpty(value))
    {
        throw new ArgumentException(Microsoft.WindowsAzure.SR.ArgumentEmptyError, paramName);
    }
}

internal static void AssertNotNull(string paramName, object value)
{
    if (value == null)
    {
        throw new ArgumentNullException(paramName);
    }
}
于 2012-10-22T22:56:44.770 に答える