C# Windows 10 Iot/UWP上的Azure存储库客户端?

C# Windows 10 Iot/UWP上的Azure存储库客户端?,c#,azure,azure-storage,azure-table-storage,windows-10-iot-core,C#,Azure,Azure Storage,Azure Table Storage,Windows 10 Iot Core,Windows 10 Iot Core/UWP(RPi)上似乎不支持Azure存储客户端。然而,我使用它来处理blob,它也可以很好地处理表。现在,在更新到最新的stable(并且-pre,尝试了两者)之后,对表的访问挂起 await table.ExecuteQuerySegmentedAsync(query, new TableContinuationToken()); 我徒劳地寻找了一种方法来实现这个同步,这至少可以帮助我调试它。我还想知道其他人目前的成功,以及在物联网核心(RPi)上使

Windows 10 Iot Core/UWP(RPi)上似乎不支持Azure存储客户端。然而,我使用它来处理blob,它也可以很好地处理表。现在,在更新到最新的stable(并且-pre,尝试了两者)之后,对表的访问挂起

await table.ExecuteQuerySegmentedAsync(query, new TableContinuationToken());
我徒劳地寻找了一种方法来实现这个同步,这至少可以帮助我调试它。我还想知道其他人目前的成功,以及在物联网核心(RPi)上使用Azure存储客户端的“独家新闻”

更新: 扩展了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>"}

是的,不幸的是,UWP应用程序还不受存储的支持,因为UWP平台中存在一个导致Auth出现问题的bug。我们正在等待UWP团队的修复。谢谢

首先,您可以始终使用RESTAPI—客户端库只是它的包装器。第二,为什么您认为使某些东西“同步”会使调试变得更容易而不是更难<代码>等待没有任何魔力,它等待一个已经异步的操作。HTTP调用甚至在桌面上也是异步的——这实际上是一个操作系统的技巧,使它们看起来是同步的。您是否尝试过将代码包装在try/catch块中并记录异常?你等电话回音等了多久?您使用的超时值是多少?谢谢。是的,我已经在IoT core上为服务总线使用了RESTAPI,使用客户端库更简单。是的,试试看。在IoT core ARM平台上,该调用只是挂起、永不返回,也从不引发异常。我已经打开了所有可以看到的东西,包括CLR异常。只是挂了。无法解释,因为它正在工作…请求可能花费的时间太长,或者导致重试次数太多。您是否尝试通过设置了
MaximumExecutionTime
ServerTimeout
来传递问题?使用测试代码和返回的异常(VisualStudio 2015远程调试器)更新了问题。任何想法都值得赞赏。由于我使用此存储库来管理同一IoT核心应用程序中的BLOB,我仍然希望在我的表中使用它(而不是REST)。似乎是同一个问题:请通过此频道告知我们。谢谢