与here相同的问题。我正在关注simple sample to export the IOT设备列表以获取blob存储,但在ExportDevicesAsync上遇到内部服务器错误。 我正在使用北欧,但我不认为更换服务器确实是一个有效的解决方案。
我回来的全部是:
An exception of type 'Microsoft.Azure.Devices.Common.Exceptions.ServerErrorException' occurred in mscorlib.dll but was not handled in user code
Additional information: {"Message":"ErrorCode:ServerError;InternalServerError","ExceptionMessage":"Tracking ID:c51dad0227604f21b9af3e8acbd77f4c-G:5-TimeStamp:06/03/2017 19:56:10"}
示例代码(连接字符串和键掩码)
internal async Task GetAllDevices()
{
var ConnectionString =
"HostName=xxxx.azure-devices.net;SharedAccessKeyName=xxxxowner;SharedAccessKey=xxxxLr3xxxxXKKILLxxxxx";
registryManager = RegistryManager.CreateFromConnectionString(ConnectionString);
var key = "https://xxxxotblob1.blob.core.windows.newt/?sv=2016-05-31&ss=bfqt&srt=sco&sp=rwdlxxxxup&se=2017-06-04T04:42:14Z&st=2017-06-03T20:42:14Z&spr=https&sig=kxxxxxxxxxxxxxxx%3D";
JobProperties exportJob = await registryManager.ExportDevicesAsync(key,"device.txt", false);
while (true)
{
exportJob = await registryManager.GetJobAsync(exportJob.JobId);
if (exportJob.Status == JobStatus.Completed ||
exportJob.Status == JobStatus.Failed ||
exportJob.Status == JobStatus.Cancelled)
{
break;
}
await Task.Delay(TimeSpan.FromSeconds(5));
}
}
我在这里做错了吗?有没有办法捕捉到我遗漏的真正异常?
答案 0 :(得分:1)
您可能有错误的exportBlobContainerUri格式。正确的看起来像这样:
https://[StorageAccountName].blob.core.windows.net/[ContainerName]?sv=2016-05-31&sr=c&sig=mxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw%3D&se=2017-06-06T02%3A07%3A22Z&sp=rwd
您可以按照以下步骤获取容器SAS URI:
//1# Get your container:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
//2# Format the Uri:
static string GetContainerSasUri(CloudBlobContainer container)
{
var sasConstraints = new SharedAccessBlobPolicy();
sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24);
sasConstraints.Permissions =
SharedAccessBlobPermissions.Write |
SharedAccessBlobPermissions.Read |
SharedAccessBlobPermissions.Delete;
string sasContainerToken = container.GetSharedAccessSignature(sasConstraints);
return container.Uri + sasContainerToken;
}