Windows 10 Iot/UWP 上的 Azure 存储库客户端?
Azure Storage Library Client on Windows 10 Iot/UWP?
Windows10Iot-Core/UWP (RPi) 似乎不支持 Azure 存储客户端。但是,我将它用于 Blob,而且它过去也可以很好地用于表格。现在,在更新到最新的 stable(和 -pre,两者都试过了)之后,对表的访问挂起在
await table.ExecuteQuerySegmentedAsync(query, new TableContinuationToken());
我徒劳地寻找一种使此同步的方法,但至少可以帮助我调试它。我也想知道其他人目前的成功以及 "scoop" 在 IoT-Core (RPi) 上使用 Azure 存储客户端的情况。
更新:
如下扩展 RequestOptions,我的简单调用也如下所示。我仔细检查了连接字符串、table 访问(来自其他工具)和帐户。他们都在其他地方工作得很好。我也将我在 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.<WriteToAsync>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.<ExecuteAsyncInternal>d__c`1.MoveNext()</StackTrace>\r\n </ExceptionInfo>\r\n </InnerExceptionInfo>\r\n </ExceptionInfo>\r\n</RequestResult>"}
是的,很遗憾,Storage 尚不支持 UWP 应用程序,因为 UWP 平台中存在导致身份验证问题的错误。我们正在等待 UWP 团队的修复。谢谢!
Windows10Iot-Core/UWP (RPi) 似乎不支持 Azure 存储客户端。但是,我将它用于 Blob,而且它过去也可以很好地用于表格。现在,在更新到最新的 stable(和 -pre,两者都试过了)之后,对表的访问挂起在
await table.ExecuteQuerySegmentedAsync(query, new TableContinuationToken());
我徒劳地寻找一种使此同步的方法,但至少可以帮助我调试它。我也想知道其他人目前的成功以及 "scoop" 在 IoT-Core (RPi) 上使用 Azure 存储客户端的情况。
更新: 如下扩展 RequestOptions,我的简单调用也如下所示。我仔细检查了连接字符串、table 访问(来自其他工具)和帐户。他们都在其他地方工作得很好。我也将我在 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.<WriteToAsync>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.<ExecuteAsyncInternal>d__c`1.MoveNext()</StackTrace>\r\n </ExceptionInfo>\r\n </InnerExceptionInfo>\r\n </ExceptionInfo>\r\n</RequestResult>"}
是的,很遗憾,Storage 尚不支持 UWP 应用程序,因为 UWP 平台中存在导致身份验证问题的错误。我们正在等待 UWP 团队的修复。谢谢!