2

Похоже, что клиент Azure Storage Client не поддерживается в Windows 10 Iot-Core/UWP (RPi). Тем не менее, я использую его для Blobs, и он также отлично работает для таблиц. Теперь, после обновления до последней стабильной (и -Pre, пытался как) доступ к таблицам висит наКлиент библиотеки библиотеки Azure на Windows 10 Iot/UWP?

await table.ExecuteQuerySegmentedAsync(query, new TableContinuationToken()); 

Я тщетно искал способ сделать это синхронная, которая, по крайней мере, помочь я отлаживаю его. Мне также интересно узнать о текущем успехе других и «совке» с использованием клиента Azure Storage на IoT-Core (RPi).

ОБНОВЛЕНИЕ: Расширенные RequestOptions, как показано ниже, и мой простой вызов, также показанный ниже. Я дважды проверил строку подключения, доступ к таблице (из других инструментов) и учетную запись. Все они отлично работают из других мест. Я также вставил исключения, которые я получаю в удаленной отладке VStudio2015 для последней версии IoT-Core RaspberryPi.

 // Setup the table container 
     // connectString looks fine, works fine elsewhere: http for debug instead of https 
     var connectionString = @"DefaultEndpointsProtocol=http;AccountName=myaccount;AccountKey=EUybijab+WHATEVERDzYubKGADwjf/6k5IuoRVgPMMqMez0gb07/dfAv9Qj1/v7NkstGAygWNab07q6FhNBQ=="; 

     var cloudStorageAccount = CloudStorageAccount.Parse(connectionString); 
     CloudTableClient cloudTableClient = cloudStorageAccount.CreateCloudTableClient(); 
     cloudTable = cloudTableClient.GetTableReference(appSettings.AzureStorageOeConfigTableName); 
     //never returns var x = await cloudTable.CreateIfNotExistsAsync(); 

     // Simplest query to existing small table 
     var pkey = "b8-27-eb-86-5d-4d"; 
     var rkey = "0000000013505717"; 
     var tstOp = TableOperation.Retrieve(pkey, rkey); 
     var requestOptions = new TableRequestOptions 
     { 
      PayloadFormat = TablePayloadFormat.JsonFullMetadata, 
      LocationMode = LocationMode.PrimaryThenSecondary, 
      RetryPolicy = new ExponentialRetry(), 
      ServerTimeout = TimeSpan.FromMinutes(2) 
     }; 
     // Throws exceptions shown below. 
     var tst1 = await table.ExecuteAsync(tstOp, requestOptions, null); 

Исключения: любые идеи или модификации моего тестового кода?

{"<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<!--An exception has occurred. For more information please deserialize this message via RequestResult.TranslateFromExceptionMessage.-->\r\n<RequestResult>\r\n <HTTPStatusCode>403</HTTPStatusCode>\r\n <HttpStatusMessage>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.</HttpStatusMessage>\r\n <TargetLocation>Primary</TargetLocation>\r\n <ServiceRequestID>c4892c5a-0002-003a-4992-493991000000</ServiceRequestID>\r\n <ContentMd5 />\r\n <Etag />\r\n <RequestDate>Wed, 06 Jan 2016 22:30:01 GMT</RequestDate>\r\n <StartTime>Wed, 06 Jan 2016 21:29:55 GMT</StartTime>\r\n <EndTime>Wed, 06 Jan 2016 21:32:12 GMT</EndTime>\r\n <Error>\r\n <Code>AuthenticationFailed</Code>\r\n <Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.\r\nRequestId:c4892c5a-0002-003a-4992-493991000000\r\nTime:2016-01-07T21:30:36.1204037Z</Message>\r\n </Error>\r\n <ExceptionInfo>\r\n <Type>StorageException</Type>\r\n <HResult>-2147467259</HResult>\r\n <Message>Cannot access a closed Stream.</Message>\r\n <Source />\r\n <StackTrace />\r\n <InnerExceptionInfo>\r\n  <ExceptionInfo>\r\n  <Type>ObjectDisposedException</Type>\r\n  <HResult>-2146232798</HResult>\r\n  <Message>Cannot access a closed Stream.</Message>\r\n  <Source>mscorlib</Source>\r\n  <StackTrace> at System.IO.__Error.StreamIsClosed()\r\n at System.IO.BufferedStream.ReadAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken)\r\n at System.Net.Http.DelegatingStream.ReadAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken)\r\n at Microsoft.WindowsAzure.Storage.Core.Util.StreamExtensions.&lt;WriteToAsync&gt;d__3`1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)\r\n at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.&lt;ExecuteAsyncInternal&gt;d__c`1.MoveNext()</StackTrace>\r\n  </ExceptionInfo>\r\n </InnerExceptionInfo>\r\n </ExceptionInfo>\r\n</RequestResult>"} 
+0

Во-первых, вы всегда можете использовать API REST - клиентская библиотека - это всего лишь оболочка. Во-вторых, почему вы думаете, что создание чего-то «синхронного» облегчит отладку вместо * более жесткого *? 'await ...' не делает никакой магии, он ждет уже асинхронной операции. И HTTP-вызовы асинхронны даже на рабочем столе - на самом деле это трюк с ОС, который делает их синхронными. Вы пробовали обернуть свой код в блок try/catch и зарегистрировать исключение? Как долго вы ждали возвращения? Какое значение тайм-аута вы использовали? –

+0

Спасибо. Да, я уже использую REST API для служебной шины на IoT-ядре, это проще с клиентской lib. Да, попробуйте/поймайте. Вызов просто зависает, никогда не возвращается и никогда не выдает исключение на платформе ARM с поддержкой IoT. Я включил все в поле зрения, включая исключения CLR. Просто зависает. Не могу объяснить, так как он работал ... – GGleGrand

+0

Запрос может занять слишком много времени или привести к слишком большому количеству попыток. Пробовали ли вы передать объект [TableRequestOptions] (https://msdn.microsoft.com/en-us/library/azure/microsoft.windowsazure.storage.table.tablerequestoptions.aspx) с помощью набора «MaximumExecutionTime» или «ServerTimeout» ? –

ответ

0

Да, к сожалению, UWP приложение пока не поддерживается для хранения, так как есть ошибка в UWP платформы, которая вызывает проблемы с аутентификацией. Мы ждем исправления в команде UWP. Благодаря!

+0

Пожалуйста, сообщите нам об этом канале. Благодаря! – GGleGrand