gpt4 book ai didi

c# - 为什么 .Net Core/Azure Web 作业示例不起作用?

转载 作者:行者123 更新时间:2023-12-03 01:02:58 24 4
gpt4 key购买 nike

我正在尝试创建一个在手动触发器上运行的 Web 作业(使用 .Net Core 2.1 和 Azure SDK 3.x)。我只是复制/粘贴示例(手动触发器)中的代码以获得一个工作起点。但是,当我运行示例(本地以及 Azure 中的测试服务器上)时,我收到此错误:

'CreateQueueMessage' can't be invoked from Azure WebJobs SDK. Is it missing Azure WebJobs SDK attributes?'

我已经按照文档中的描述创建了 azure Web 作业(.Net Core 控制台应用程序),并且我逐字使用示例中的手动触发器(和主机)代码。这是一个错误,还是我需要做其他事情?

以下是文档: https://learn.microsoft.com/en-us/azure/app-service/webjobs-sdk-how-to#triggers

这是我在项目中使用的代码:

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace PubSubTrigger
{
class Program
{
[NoAutomaticTrigger]
public static void CreateQueueMessage(ILogger logger, string value, Queue("outputqueue")] out string message)
{
message = value;
logger.LogInformation("Creating queue message: ", message);
}
static async Task Main(string[] args)
{
var builder = new HostBuilder();
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage();
});
var host = builder.Build();
using (host)
{
var jobHost = host.Services.GetService(typeof(IJobHost)) as JobHost;
var inputs = new Dictionary<string, object>
{
{ "value", "Hello world!" }
};

await host.StartAsync();
await jobHost.CallAsync("CreateQueueMessage", inputs);
await host.StopAsync();
}
}
}
}

作为补充说明,我确实在 SO 上发现了类似的问题: Azure Functions - can't be invoked from Azure WebJobs SDK

但是,更改目标框架(更改为 .netstandard)并不在 Microsoft 文档的任何部分中。我觉得很奇怪的是,文档会指导我专门创建一个 .net 控制台 azure Web 作业应用程序,但后来又将其更改为 .netstandard。而且,只是为了好玩,我确实尝试了该解决方案,但它产生了完全不同的错误:

The target process exited without raising a CoreCLR started event. Ensure that the target process is configured to use .NET Core. This may be expected if the target process did not run on .NET Core.

所以我认为另一篇文章是一个不同的问题。

最佳答案

只需将 class Program 更改为 public class Program 即可正常工作。

整个代码如下所示:

public class Program
{
[NoAutomaticTrigger]
public static void CreateQueueMessage(ILogger logger, string value, [Queue("myqueue")] out string message)
{
...
}
public static void Main(string[] args)
{
...
...
}
}

关于c# - 为什么 .Net Core/Azure Web 作业示例不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56624015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com