0

我正在编写一个订阅 Cosmos DB 更改源的 Azure Function 应用程序。当我使用 Visual Studio 2019 在本地运行应用程序 (F5) 时,我在 CLI 上收到以下错误:

Azure Function Core Tools 报告“未找到工作职能”。

整个代码片段如下:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;

namespace ZZZ.ChangeFeedSubscriber
{
    public static class ChangeFeedSubscriber
    {
        [FunctionName("ChangeFeedSubscriber")]
        public static void Run([CosmosDBTrigger(
            databaseName: "XXX",
            collectionName: "YYY",
            ConnectionStringSetting = "XXX",
            LeaseCollectionName = "leases")] IReadOnlyList<Doc> docs, FunctionContext context)
        {
            var logger = context.GetLogger("ChangeFeedSubscriber");

            if (docs != null && docs.Count > 0)
            {
                logger.LogInformation("Documents modified: " + docs.Count);

                foreach (var doc in docs)
                {
                    logger.LogInformation("ID: " + doc.id);
                }
            }
        }
    }
}

我试图在应用程序参数上设置“--verbose”以查看日志输出,但它引发了错误。

添加“--verbose”会引发错误。

将“--verbose”添加到应用程序参数的结果。

我也尝试设置“start --verbose”,但它也抛出了一个错误。

添加“start --verbose”也会引发错误。

将“start --verbose”添加到应用程序参数的结果。

我不知道此时我还能检查什么。应用程序无法启动,并且根据我所做的搜索,我看不到日志输出。

任何帮助,将不胜感激。蒂亚!

4

1 回答 1

0

看起来您在这里混合了进程内和进程外模型,这导致了问题。

从代码中,我假设您有一个进程外(隔离工作者)函数应用程序。但是您的第二行是using导入Microsoft.Azure.WebJobs命名空间的语句。我还看到您正在使用FunctionName来自Microsoft.Azure.WebJobs包的属性。

对于进程外功能应用,您不应使用 webjobs 包。相反,您应该使用Microsoft.Azure.Functions.Worker.Extensions中的等效包

要修复,请打开您的.csproj文件并删除Microsoft.Azure.WebJobs.Extensions.CosmosDB包。Microsoft.Azure.Functions.Worker.Extensions.CosmosDB为(进程外工作人员版本)添加一个新条目。您也可以使用 nuget 包管理器 UI 执行相同的操作。

更改后,您的 csproj 文件将如下所示

<ItemGroup>
  <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.CosmosDB" Version="3.0.9" />
  <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.0.3" OutputItemType="Analyzer" />
  <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.1.0" />
</ItemGroup>

还要确保现在您使用的是Function属性而不是FunctionName并删除了 using 语句来导入Microsoft.Azure.WebJobs命名空间。

[Function("Function1")]                
public static void Run([CosmosDBTrigger(

通过此更改,将发现您的功能。

于 2021-09-22T23:12:00.813 回答