La fonction Azure précompilée et la sortie de liaison CloudTable ne fonctionnent pas

J’utilise une fonction Azure précompilée qui ressemble à:

public static async Task Run(Stream inputBlob, Stream outputJson, Stream outputXml, CloudTable schedulerTable) 

La liaison de sortie ressemble à:

 { "name": "schedulerTable", "type": "table", "direction": "out", "tableName": "SchedulerTable", "connection": "SchedulerTable" } 

Lorsque je supprime le paramètre schedulerTable de ma fonction, cela fonctionne. Le message que l’hôte me lance au visage est:

 Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.InputFileAdaptorAF'. Microsoft.Azure.WebJobs.Host: Can't bind Table to type 'Microsoft.WindowsAzure.Storage.Table.CloudTable'. 

Vraiment, lorsque j’ajoute une liaison de sortie de table essayant avec différentes alternatives, rien ne fonctionne. Les alternatives qui ne fonctionnent pas sont:

  • Paramètre schedulerTable de type SchedulerRegister. La classe SchedulerRegister hérite de TableEntity.
  • Paramètre schedulerTable de type ICollector.
  • Paramètre schedulerTable de type CloudTable. (le cas ci-dessus).

S’il vous plaît, comment puis-je résoudre ce problème? (Utilisez une liaison de sortie à la table azure)

Vous rencontrez probablement des problèmes d’inadéquation des types. Quelle version du SDK de stockage utilisez-vous? Vous devez vous assurer que les références du SDK de stockage correspondent aux attentes du moteur d’exécution, à savoir 7.2.1.

Assurez-vous de bien référencer le stockage SDK version 7.2.1.

Selon votre description, j’ai testé ce problème de liaison à la sortie de la table, je pourrais le faire fonctionner comme prévu. Voici mon extrait de code, vous pouvez vous y référer.

function.json

 { "bindings": [ { "name": "inputBlob", "type": "blobTrigger", "direction": "in", "path": "input/{name}", "connection": "AzureStorageConnectionSsortingng" }, { "type": "table", "name": "outTable", "tableName": "UploadFile", "connection": "AzureStorageConnectionSsortingng", "direction": "out" } ], "disabled": false } 
  • ICollector
 #r "Microsoft.WindowsAzure.Storage" using Microsoft.WindowsAzure.Storage.Table; using Microsoft.WindowsAzure.Storage.Blob; public static void Run(CloudBlockBlob inputBlob, ICollector outTable, TraceWriter log) { ssortingng blobUri=inputBlob.StorageUri.PrimaryUri.ToSsortingng(); log.Info($"C# Blob sortinggger function sortingggered, blob path: {blobUri}"); outTable.Add(new UploadFile() { PartitionKey = "Functions", RowKey = Guid.NewGuid().ToSsortingng(), Name = blobUri }); } public class UploadFile : TableEntity { public ssortingng Name { get; set; } } 
  • CloudTable
 #r "Microsoft.WindowsAzure.Storage" using Microsoft.WindowsAzure.Storage.Table; using Microsoft.WindowsAzure.Storage.Blob; public static void Run(CloudBlockBlob inputBlob,CloudTable outTable, TraceWriter log) { ssortingng blobUri=inputBlob.StorageUri.PrimaryUri.ToSsortingng(); log.Info($"C# Blob sortinggger function sortingggered, blob path: {blobUri}"); outTable.Execute(TableOperation.Insert(new UploadFile() { PartitionKey = "Functions", RowKey = Guid.NewGuid().ToSsortingng(), Name = blobUri })); } public class UploadFile : TableEntity { public ssortingng Name { get; set; } } 

Modifiez votre code et cliquez sur Enregistrer . Si la compilation s’exécute correctement, le journal suivant peut s’afficher lorsque la fonction est déclenchée et l’enregistrement est ajouté à Azure Table Storage.

Pour plus de détails, vous pouvez vous référer à ce document officiel sur la liaison de table de stockage pour la fonction Azure.

Vraiment, cette réponse provient de quelqu’un (je ne me souviens pas de nom) de l’équipe de Azure Functions, ici dans cette question, mais il supprime sa réponse. Il dit que le problème vient sûrement de la version différente de la dll attendue. Je peux confirmer que c’était le problème.

La solution consiste à vérifier la version des dll utilisées dans AppData \ Local \ Azure.Functions.Cli \ 1.0.0-beta.91 et à les utiliser dans la solution.