2014-10-28 2 views
8

Utilizzando l'SDK WebJobs di Azure, desidero creare una funzione asincrona che riceverà l'input della coda di ServiceBus e scriverà su un output della coda di ServiceBus. I metodi asincroni non possono avere parametri che, per esempio su BlobStorage, sembrano essere aggirati avendo invece Streams e TextWriters. Tuttavia, quando provo a fare lo stesso con un parametro di ServiceBus, ricevo un'eccezione.Come si dispone di una funzione Async che scrive su una coda del bus di servizio?

public static async void Transform(
    [ServiceBusTrigger("%InputQueue%")] String input, 
    [ServiceBus("%OutputQueue%")] TextWriter output, 
    TextWriter log) 

Errore metodo di indicizzazione 'FilterCurrentCpesToNewCpes'

Impossibile associare ServiceBus per digitare 'System.IO.TextWriter'.

Ho ricevuto un messaggio simile per Stream.

risposta

12

Poiché le funzioni Async non possono avere parametri out, è possibile eseguire il binding a ICollector<T> o IAsyncCollector<T> ed eseguire l'operazione Add() per inviare un messaggio. ICollector è definito nell'SDK di WebJobs.

L'esempio seguente lo dimostra.

public static async void Transform(
[ServiceBusTrigger("%InputQueue%")] string input, 
[ServiceBus("%OutputQueue%")] IAsyncCollector<string> output, 
TextWriter log) 
    {    
     await output.AddAsync(input); 
    }