我遇到Azure服務總線輸出綁定問題,我不確定如何繼續。我沒有找到類似的問題,所以我很抱歉,如果這是重複的。Azure功能服務總線輸出綁定錯誤
我想使用本地VS 2017開發過程,所以應該自動生成的function.json綁定。函數簽名如下:
[FunctionName("RequestNewPaladinInvitation")]
public static HttpResponseMessage Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequestMessage req,
[ServiceBus("thequeue")] ICollector<Invitation> invitationOutputQueue,
TraceWriter log)
{
//Do some stuff and write to the queue
invitationOutputQueue.Add(invite);
}
在本地運行函數時出現以下錯誤。
Microsoft.Azure.WebJobs.Host:錯誤索引方法 'RequestNewPaladinInvitation.Run'。 Microsoft.Azure.WebJobs.Host: 無法將參數'invitationOutputQueue'綁定到ICollector`1類型。 確保綁定支持參數Type。如果你是 使用綁定擴展(例如ServiceBus,定時器等),確保 你已經調用了 啓動代碼中的擴展的註冊方法(例如config.UseServiceBus(),config.UseTimers )等)。 [2017年9月1日下午5時42分49秒]錯誤索引方法 'RequestNewPaladinInvitation.Run'
我的兩個host.json和local.settings.json定義如下:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<MyStorageAccountInfo>",
"AzureWebJobsDashboard": "<MyDashboardInfo>",
"AzureWebJobsServiceBus": "<MyServiceBusConnectionString>"
}
}
我深深地感到,定義AzureWebJobsServiceBus
值會使整個函數應用程序中的任何ServiceBus綁定的默認ServiceBusAccount成爲可能。
我也嘗試明確地指出ServiceBus綁定到賬戶的連接字符串,並使用以下替代屬性[ServiceBus("createpaladininvitation",Connection = "ServiceBus")]
。我對該慣例的理解是,不應該包含屬性的一部分。以防萬一我誤解了,我也試過[ServiceBus("createpaladininvitation",Connection = "AzureWebJobsServiceBus")]
。我甚至嘗試用以下屬性來裝飾方法和參數,[ServiceBusAccount("ServiceBus")]
。我也嘗試了與ServiceBus屬性的Connection參數相同的變體。
在所有情況下,我都得到相同的function.json輸出,它顯示沒有爲ServiceBus輸出綁定生成綁定。
這裏的function.json:
{
"generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0",
"configurationSource": "attributes",
"bindings": [
{
"type": "httpTrigger",
"methods": [
"post"
],
"authLevel": "anonymous",
"name": "req"
}
],
"disabled": false,
"scriptFile": "..\\bin\\AzureFunctionsPoc.dll",
"entryPoint": "AzureFunctionsPoc.RequestNewPaladinInvitation.Run"
}
這感覺就像我失去了一些東西明顯。
[更新]
當我試圖繼續弄清楚是怎麼回事,我在本地運行的功能和編輯生成function.json文件,並補充說,我認爲應該已產生約束力。由此產生的手動編輯的function.json是:
{
"generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0",
"configurationSource": "attributes",
"bindings": [
{
"type": "httpTrigger",
"methods": [
"post"
],
"authLevel": "anonymous",
"name": "req"
},
{
"type": "serviceBus",
"name": "invitationOutputQueue",
"queueName": "createpaladininvitation",
"connection": "ServiceBus",
"direction": "out"
}
],
"disabled": false,
"scriptFile": "..\\bin\\AzureFunctionsPoc.dll",
"entryPoint": "AzureFunctionsPoc.RequestNewPaladinInvitation.Run"
}
通過這些編輯,該方法的工作原理與預期完全相同。
這種感覺更像是我缺少的語法或約定問題或工具錯誤。
似乎與[此問題](https://stackoverflow.com/questions/45986719/using-azure-functions-in-vs2017-cannot-bind-to-servicebus-queue-as-an-output ) – Mikhail
@Mikhail - 我快速瀏覽了你鏈接的問題。它看起來很相似。但是,與這個問題不同的是,在我的情況下,更改Trigger類型似乎沒有任何區別。但是,謝謝你指出。 –