0

Win 8 アプリから Azure BLOB にイメージを挿入しようとしています。これを実行しようとすると、500 例外が発生します。これは私が使用しているクラスです -

private MobileServiceCollection<TodoItem, TodoItem> items;
        private IMobileServiceTable<TodoItem> todoTable = App.MobileService.GetTable<TodoItem>();

   [DataContract]
    public class TodoItem
        {

        [DataMember(Name = "id")]
        public int ID { get; set; }

        [DataMember(Name = "text")]
        public string Text { get; set; }



        [DataMember(Name = "containerName")]
        public string ContainerName { get; set; }


        [DataMember(Name = "resourceName")]
        public string ResourceName { get; set; }


        [DataMember(Name = "sasQueryString")]
        public string SasQueryString { get; set; }


        [DataMember(Name = "imageUri")]
        public string ImageUri { get; set; }
        }

-await todoTable.InsertAsync(todoItem); 行で例外がスローされます。 この時点で例外がスローされ、SASQueryString の値と ImageUri が NULL になります。

        private async void OnTakePhotoClick(object sender, RoutedEventArgs e)
        {
            // Capture a new photo or video from the device.
            CameraCaptureUI cameraCapture = new CameraCaptureUI();
            media = await cameraCapture
                .CaptureFileAsync(CameraCaptureUIMode.PhotoOrVideo);
            TodoItem todoitem = new TodoItem { Text="NA",ContainerName="todoitemimages"};
             InsertTodoItem(todoitem);


        }

private async void InsertTodoItem(TodoItem todoItem)
{
    string errorString = string.Empty;


    if (media != null)
    {
        // Set blob properties of TodoItem.

        todoItem.ResourceName = media.Name;

    }


    // Send the item to be inserted. When blob properties are set this
    // generates an SAS in the response.
    await todoTable.InsertAsync(todoItem);


    // If we have a returned SAS, then upload the blob.
    if (!string.IsNullOrEmpty(todoItem.SasQueryString))
    {
        // Get the new image as a stream.
        using (var fileStream = await media.OpenStreamForReadAsync())
        {
            // Get the URI generated that contains the SAS 
            // and extract the storage credentials.
            StorageCredentials cred = new StorageCredentials(todoItem.SasQueryString);
            var imageUri = new Uri(todoItem.ImageUri);


            // Instantiate a Blob store container based on the info in the returned item.
            CloudBlobContainer container = new CloudBlobContainer(
                new Uri(string.Format("https://{0}/{1}",
                    imageUri.Host, todoItem.ContainerName)), cred);


            // Upload the new image as a BLOB from the stream.
            CloudBlockBlob blobFromSASCredential =
                container.GetBlockBlobReference(todoItem.ResourceName);
            await blobFromSASCredential.UploadFromStreamAsync(fileStream.AsInputStream());
        }
    }


    // Add the new item to the collection.
    items.Add(todoItem);


}

とにかく私はこの例外を解決することができます.Thanks.

   These are the exception details -

Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException が処理されませんでした。 Microsoft.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) での TaskAwaiter.HandleNonSuccess (タスク タスク) Microsoft.Runtime.CompilerServices.TaskAwaiter.GetResult() で Microsoft.WindowsAzure.MobileServices.MobileServiceTable`1.d_0.MoveNext() --- 例外がスローされた前の場所からのスタック トレースの終了 --- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) で System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) DeltaVMobile.CrudeStorageScenario.d でc:\Users\~ の _22.MoveNext() --- 例外がスローされた前の場所からのスタック トレースの終わり --- System.Runtime.CompilerServices.AsyncMethodBuilderCore.b__0 (オブジェクト状態) で System.Threading.WinRTSynchronizationContext で。 Invoker.InvokeCore() --- 例外がスローされた前の場所からのスタック トレースの終わり --- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() で System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.System.Threading.ThreadPoolWorkQueue.Dispatch() InnerException での ExecuteWorkItem():

4

1 に答える 1