我有一個小型的IoT項目,我正在縮小,它基本上只是從我的「智能」房子抓取我最新的傳感器遙測,並將它顯示在一個非常標準的Xamarin應用。連接到Xamarin的Azure存儲表
我的問題是周圍使用Xamarin和Azure.Storage的:
我有3個表,我下載我的應用程序:
public DeviceReadingsReader()
{
_deviceReadingsTable = TableClient.GetTableReference("DeviceReadings");
_locationsTable = TableClient.GetTableReference("Locations");
_goalsTable = TableClient.GetTableReference("TemperatureGoals");
}
正如你所知道的,他們都參考一TableClient我發現使用舊的PCL兼容的NuGet包(一個問題:爲什麼不是最新的azure.storage包能夠安裝在Xamarin.Forms ??中)
在UWP和iOS上,我沒有問題這樣做:
var cloudStorageAccount = CloudStorageAccount.Parse(connectionstring);
_tableClient = storageAccount.CreateCloudTableClient();
然而,當我運行在Android這個代碼,我得到我使用的是SAS令牌,而不是例外demmanding,所以我創建了存儲帳戶在Azure門戶在SAS令牌,用了2年時間,然後像這樣使用它:
但是,在Android,iOS或UWP上運行此操作會導致授權失敗消息,表明我的SaS令牌無效。
有沒有人知道我在做什麼錯了,以及如何編寫一段代碼,將在所有3個平臺上實際執行?
var sas = "https://0000000000000.table.core.windows.net/?sv=2016-05-31&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-03-08T23:51:51Z&st=2017-03-08T15:51:51Z&spr=https&sig=0000000000000000000000000000000000000000000000&comp=list&restype=table";
StorageCredentials creds = new StorageCredentials(sas);
CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(creds, null, null, new Uri("https://0000000000000.table.core.windows.net/"), null);
_tableClient = cloudStorageAccount.CreateCloudTableClient();
編輯:我知道,我可以做一個雲API來獲取相同的價值觀,而這一切會消失,但是這僅僅是從存儲表中獲取的值,我真不」看不到有必要建立一個插圖中的WebAPI它
這裏的例外:
<RequestResult>
<HTTPStatusCode>403</HTTPStatusCode>
<HttpStatusMessage>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.</HttpStatusMessage>
<TargetLocation>Primary</TargetLocation>
<ServiceRequestID>926f8520-0002-0033-02b2-98bab7000000</ServiceRequestID>
<ContentMd5 />
<Etag />
<RequestDate>Thu, 09 Mar 2017 09:55:29 GMT</RequestDate>
<StartTime>Thu, 09 Mar 2017 08:55:28 GMT</StartTime>
<EndTime>Thu, 09 Mar 2017 08:55:30 GMT</EndTime>
<Error>
<Code>AuthenticationFailed</Code>
<Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:926f8520-0002-0033-02b2-98bab7000000
Time:2017-03-09T08:55:32.7622395Z</Message>
</Error>
<ExceptionInfo>
<Type />
<HResult>-2147467259</HResult>
<Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.</Message>
<Source>Microsoft.WindowsAzure.Storage</Source>
<StackTrace> at Microsoft.WindowsAzure.Storage.Core.Executor.Executor+<ExecuteAsyncInternal>d__0`1[T].MoveNext() [0x007eb] in <03db1448eaed4d018343fcf0153c030d>:0 </StackTrace>
</ExceptionInfo>
</RequestResult>
你能分享一下你的SAS令牌的樣子嗎?只是混淆SAS中的sig部分。另外,請分享您獲取授權失敗錯誤的代碼。 –
重寫原始帖子以包含SAS令牌和異常消息。我嘗試過使用SAS令牌的變種無濟於事(包括/不包括網址,添加** restype **作爲另一篇文章的提示也沒有幫助 –