2016-05-28 48 views
2

我正在嘗試使用EventHub和Azure函數進行一些概念驗證。我在C#中有一個通用Webhook函數,我想將消息傳遞給我的EventHub。在Azure函數中創建Azure EventHub消息

我卡在「集成」選項卡上給出的參數名稱上。如果我在參數中聲明這個名字,我必須給它一個類型。我不知道什麼樣的類型,雖然...我已經嘗試過:

  • 字符串(其他功能與方向一起使用,不適用於webhooks)。
  • EVENTDATA
  • IEnumerable的

我無法得到它的工作。如果我不這樣做,我得到錯誤信息: 「命名缺少約束力的論點‘outputEventHubMessage’」

如果我給了錯誤的類型我得到的消息: 「錯誤索引方法‘Functions.GenericWebhookCSharp1’。 Microsoft.Azure.WebJobs.Host:無法綁定到參數。「

我可能有點迷失在文檔或只是有點累,但我會很感激這裏的任何幫助!

/喬金 -

回答

3

很有可能你只是缺少您的參數out關鍵字。下面是一個可用的WebHook函數,它聲明映射到EventHub輸出的out string message參數,並通過message = "Test Message"寫入EventHub消息。

因爲異步函數不能返回參數,所以我讓這個函數同步(返回一個object而不是Task<object>)。如果您想保持異步,而不是使用out參數,則可以綁定到IAsyncCollector<string>參數。然後您可以通過在收集器上調用AddAsync方法來排隊一條或多條消息。

有關EventHub綁定及其支持的類型的更多詳細信息,請參閱here。請注意,其他綁定遵循相同的一般模式。

#r "Newtonsoft.Json" 

using System; 
using System.Net; 
using Newtonsoft.Json; 

public static object Run(HttpRequestMessage req, out string message, TraceWriter log) 
{ 
    string jsonContent = req.Content.ReadAsStringAsync().Result; 
    dynamic data = JsonConvert.DeserializeObject(jsonContent); 

    log.Info($"Webhook was triggered! Name = {data.first}"); 

    message = "Test Message"; 

    var res = req.CreateResponse(HttpStatusCode.OK, new { 
     greeting = $"Hello {data.first} {data.last}!" 
    }); 

    return res; 
} 
+0

這樣做。非常感謝!我真的很想知道是否與異步部分相關,並認爲我必須使用它。現在我可以看到我的消息進入我的EventHub,並可以轉到我的PoC中的下一個位置!非常感謝。 – Joakim

相關問題