2017-06-03 1 views
1

Même problème que here. Je suis la liste des périphériques simple sample to export the IOT pour le stockage blob mais en rencontrant une erreur interne du serveur sur ExportDevicesAsync. J'utilise l'Europe du Nord, mais je ne pense pas que changer de serveur soit vraiment une solution valable.Azure IOT ExportDevicesAsync erreur interne au serveur

Tout ce que je suis en train de retour est:

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"} 

Exemple de code (chaînes de connexion et les touches masquées)

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

} 

que je fais quelque chose de mal ici? Y at-il un moyen d'attraper la véritable exception qui me manque?

+0

Quelle ligne cause cette exception? –

+0

@ RitaHan-MSFT c'était en ligne: JobProperties exportJob = wait registryManager.ExportDevicesAsync (clé, "device.txt", false); – Damo

Répondre

1

Vous avez peut-être un mauvais format du fichier exportBlobContainerUri. La bonne ressemble à ceci:

https://[StorageAccountName].blob.core.windows.net/[ContainerName]?sv=2016-05-31&sr=c&sig=mxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw%3D&se=2017-06-06T02%3A07%3A22Z&sp=rwd 

Vous pouvez suivre ces étapes pour obtenir le conteneur URI SAS:

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

Pour plus d'informations, vous pouvez faire référence Create a container et Get the container SAS URI.