2017-09-01 67 views
0

我遇到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" 
} 

通過這些編輯,該方法的工作原理與預期完全相同。

這種感覺更像是我缺少的語法或約定問題或工具錯誤。

+0

似乎與[此問題](https://stackoverflow.com/questions/45986719/using-azure-functions-in-vs2017-cannot-bind-to-servicebus-queue-as-an-output ) – Mikhail

+0

@Mikhail - 我快速瀏覽了你鏈接的問題。它看起來很相似。但是,與這個問題不同的是,在我的情況下,更改Trigger類型似乎沒有任何區別。但是,謝謝你指出。 –

回答

3

關於ServiceBus輸出觸發器,目前存在一個出色的工具錯誤。如果你部署「您的應用程序Azure的功能它都可以工作,只是沒有本地與工具

請在這裏看到相關GitHub的問題:Service Bus output binding issue

這裏:Latest v1.0.0 not working with ServiceBus. alpha 6 still works.

這與懶惰的負載。我們沒有拿起服務總線擴展,因此索引錯誤。 (Azure/azure-webjobs-sdk-script#1637)

原因是ServiceBus擴展與其他擴展不同。我們期望擴展有一個實現IExtensionConfigProvider的公共無參數配置對象。

SB是內部的(https://github.com/Azure/azure-webjobs-sdk/blob/663a508e8a851629c26a51e7de3af36629dfd120/src/Microsoft.Azure.WebJobs.ServiceBus/Config/ServiceBusExtensionConfig.cs#L17),所以我們對ExportedTypes的掃描忽略了它(請參閱https://github.com/Azure/azure-webjobs-sdk-script/blob/b1445485807bb190ba0716af1a8dc81a864b5228/src/WebJobs.Script/Host/ScriptHost.cs#L735)。 SB的配置沒有無參數ctor,因此Activator.createInstance調用也會失敗。 此修補程序(我們爲腳本運行時所做的)Azure/azure-webjobs-sdk-script#1804將修復此問題;但這需要拉到CLI。

+0

謝謝!我似乎無法找到合適的回購。 –