Azure IOT ExportDevicesAsync内部服务器错误

时间:2017-06-03 20:00:42

标签: azure iot azure-iot-hub

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));
    }

}

我在这里做错了吗?有没有办法捕捉到我遗漏的真正异常?

1 个答案:

答案 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;
}

有关详情,请参阅Create a containerGet the container SAS URI