如何在Azure函数(v2,.net核心)中注册触发器绑定?

时间:2019-01-21 19:12:30

标签: c# azure azure-functions

我正在尝试创建一个持久函数,因此我有一个带有serviceBusTrigger的函数,一个带有orchestrationTrigger的函数,以及一个带有activityTrigger的函数。在注册触发器绑定方面,我做错了。

在本地运行时,出现以下错误:

  

未找到工作功能。尝试制定工作类别和方法   上市。如果您使用的是绑定扩展(例如Azure存储,   ServiceBus,Timer等),以确保您已致电注册   启动代码中扩展名的方法(例如   build.AddAzureStorage(),build.AddServiceBus(),builder.AddTimers(),   等)。

     

以下3个功能有误:

     

:绑定类型'serviceBusTrigger'未注册。请确保类型   是正确的,并且已安装绑定扩展。

     

:   绑定类型“ orchestrationTrigger”未注册。请   确保类型正确并已安装绑定扩展。

     

:绑定类型'activityTrigger'不是   注册。请确保类型正确且具有约束力   扩展程序已安装。

在.net核心功能中,据我了解,没有启动文件可以明确地在代码中注册绑定。相反,我刚刚安装了与每种触发器类型相对应的nuget软件包。

例如参考,这是我的serviceBusTrigger函数:

[FunctionName("Function_HttpStart")]
public static async Task Run(
    [ServiceBusTrigger("my-queuename", Connection = "ConnectionString")] RequestObject request,
    [OrchestrationClient]DurableOrchestrationClient starter,
    ILogger log)
{
    var instanceId = await starter.StartNewAsync("OtherFunction", request);

    log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
}

和生成的function.json文件:

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.24",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "serviceBusTrigger",
      "connection": "ConnectionString",
      "queueName": "my-queueName",
      "name": "request"
    }
  ],
  "disabled": false,
  "scriptFile": "../bin/x.dll",
  "entryPoint": "Namespace.Project.Run"
}

2 个答案:

答案 0 :(得分:1)

请确保我们没有单独安装软件包Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator。这是Microsoft.NET.Sdk.Functions引用的软件包,显式安装会导致[FunctionProject]\bin\Debug\netcoreapp2.1\bin\extensions.json文件(包含绑定扩展名信息)无法生成。

项目文件(右键单击项目Edit [FunctionProject].csproj)应如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="1.7.1" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="3.0.2" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.24" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

答案 1 :(得分:1)

对于我来说,安装名为:

的软件包

Microsoft.Azure.Webjobs.Extensions.ServiceBus

代替:

Microsoft.Azure.Webjobs.ServiceBus

...帮助解决了问题。