2

J'ai une fonction python avec un trigger de servicebus et une liaison d'entrée BLOB. Le nom du blob correspond au contenu du message de la file d'attente. Mon fichier function.json ressemble que:Fonction Azure - C# - ServicebusTrigger avec liaison Blob

{ 
"bindings": [ 
    { 
    "type": "serviceBusTrigger", 
    "name": "inputMessage", 
    "connection": "Omnibus_Validation_Listen_Servicebus", 
    "queueName": "validation-input-queue", 
    "accessRights": "listen", 
    "direction": "in" 
    }, 
    { 
    "type": "blob", 
    "name": "inputBlob", 
    "path": "baselines/{inputMessage}", 
    "connection": "Omnibus_Blob_Storage", 
    "direction": "in" 
    } 
], 
"disabled": false 
} 

Et cela fonctionne comme un charme.

Je voudrais créer une fonction C# avec les mêmes liaisons, mais cela ne semble pas fonctionner. J'ai utilisé le même fichier function.json.

Je dispose d'un fichier project.json:

{ 
    "frameworks": { 
     "net46": { 
      "dependencies": { 
       "WindowsAzure.Storage": "8.5.0" 
      } 
     } 
    } 
} 

et mon fichier run.csx ressemble à ça:

public static void Run(string inputMessage, Stream inputBlob, TraceWriter log) 
{ 
    log.Info($"C# ServiceBus queue trigger function processed message: {inputMessage}"); 
} 

Quand je sauve/exécuter la fonction, j'ai reçu cette erreur:

Function ($import-baseline) Error: Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.import-baseline'. Microsoft.Azure.WebJobs.Host: No binding parameter exists for 'inputMessage'.

Y at-il une différence entre le python et C# sdk pour ce genre de liaison?

+0

semble correct. Essayez de supprimer project.json, ce n'est pas nécessaire dans ce cas. – Mikhail

+0

@Mikhail, Ne fonctionne pas :-( – Thomas

+0

Oui ... le problème est avec la syntaxe 'baselines/{inputMessage}' Mais drôle que cela fonctionne en python ... – Mikhail

Répondre

0

Je peux aussi le reproduire de mon côté si je lie le chemin blob d'entrée avec baselines\{serviceBusTrigger} ou baselines\{inputMessage} dans le fichier function.json.

Je ne suis pas sûr qu'il soit pris en charge par la file d'attente de bus de service d'entrée intégrée et le blob d'entrée actuellement. Nous pourrions donner notre équipe de fonction feedback à Azure.

Si Azure file d'attente de stockage est acceptable, nous pouvons utiliser le déclencheur de file d'attente de stockage Azure pour ce faire. Je l'ai testé de mon côté, ça fonctionne correctement.

enter image description here

fichier run.csx

using System; 
using System.Threading.Tasks; 

public static void Run(string myQueueItem, Stream inputBlob, TraceWriter log) 
{ 
    log.Info($"C# storage queue trigger function processed message: {myQueueItem}"); 
    StreamReader reader = new StreamReader(inputBlob); 
    string text = reader.ReadToEnd(); 
    log.Info(text); 
} 

de function.json

{ 
    "bindings": [ 
    { 
     "type": "blob", 
     "name": "inputBlob", 
     "path": "incontainer/{queueTrigger}", 
     "connection": "testweblog_STORAGE", 
     "direction": "in" 
    }, 
    { 
     "type": "queueTrigger", 
     "name": "myQueueItem", 
     "queueName": "myqueue", 
     "connection": "testweblog_STORAGE", 
     "direction": "in" 
    } 
    ], 
    "disabled": false 
} 
+0

Merci Tom, je sais que ça marche avec queueTrigger.Vous vous demandez pourquoi ça fonctionne avec Python et pas avec C# :-) – Thomas

+0

'Je me demandais pourquoi il fonctionne avec Python et pas avec C#' Je suppose qu'il n'est pas implémenté dans le C# actuellement, car ils sont différents de la bibliothèque. –