6

我創建了一個Azure Function,每次將新消息添加到Azure ServiceBus隊列時都會觸發該觸發器。 有了這個代碼,它工作正常:在Azure函數中使用帶ServiceBus隊列觸發器的BrokeredMessage

#r "Newtonsoft.Json" 
#load "..\shared\person.csx" 

using Newtonsoft.Json; 
using Newtonsoft.Json.Serialization; 

public static void Run(string message, TraceWriter log) 
{ 
    var person = JsonConvert.DeserializeObject<Person>(message, 
      new JsonSerializerSettings() {ContractResolver = new CamelCasePropertyNamesContractResolver()}); 
    log.Verbose($"From DeserializeObject: {person.FirstName} {person.LastName}"); 
} 

我已經看到了,我還可以在消息綁定到POCO這樣的:

public static void Run(Person message, TraceWriter log) 
{ 
    log.Verbose($"From DeserializeObject: {message.FirstName} {message.LastName}"); 
} 

現在我想將消息綁定到BrokeredMessage因爲我需要訪問消息的屬性。

回答

13

編輯新的SDK支持使用#r directive

#r "Microsoft.ServiceBus" 
using Microsoft.ServiceBus.Messaging; 

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

舊版本

只有兩個步驟servicebus SDK:

我已經創建project.json文件添加到參考WindowsAzure.ServiceBus Nuget包(請參閱SO Post):

{ 
    "frameworks": { 
     "net46":{ 
      "dependencies": { 
       "WindowsAzure.ServiceBus": "2.7.6" 
      } 
     } 
    } 
} 

我已經加入斡旋消息的引用:

using Microsoft.ServiceBus.Messaging; 

public static void Run(BrokeredMessage message, TraceWriter log) 
{ 
    log.Verbose("Function has been triggered !!!"); 
} 
+0

所以你的問題是解決上述問題? – mathewc

+0

是的,我花了一些時間才弄清楚如何綁定到中斷消息。只是分享信息^^ – Thomas

1

我想托馬斯的解決方案,似乎這並沒有工作了。

documentation狀態:

此外,下列組件是特殊的套管,並且可以通過simplename引用(如r組成 「的AssemblyName」):

  • ...
  • Microsoft.ServiceBus

所以沒有觸摸project.json文件以下工作:

#r "Microsoft.ServiceBus" 

using Microsoft.ServiceBus.Messaging; 

public static void Run(BrokeredMessage msg, TraceWriter log) 
{ 
    log.Info($"C# ServiceBus queue trigger function processed message: {msg}"); 
} 
相關問題