Azure 函数拒绝作为 .NET 隔离工作线程运行?

问题描述 投票:0回答:1

我在.NET 4.8中有一个Azure函数(由于WCF而卡在这个框架上)。

该函数正在尝试使用

ServiceBusTrigger
从 Azure Servicebus 接收消息。

我遇到了一个例外:

无法将输入参数“message”从类型“System.String”转换为类型“Azure.Messaging.ServiceBus.ServiceBusReceivedMessage”

我的假设是我的函数正在“进程内”运行而不是“隔离”运行,因为它尝试将第一个参数映射为字符串而不是

ServiceBusReceivedMessage
- 这是正确的吗?

但我不明白为什么它会在进程中运行。

在我的

.csproj
我有“Exe”

<TargetFramework>net48</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<OutputType>Exe</OutputType>

我引用以下软件包:

<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.17.5" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.18.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Timer" Version="4.0.1" />
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.10.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.7.0" />

我的

host.json
看起来像这样:

{
   "version": "2.0"
}

我部署的功能具有以下应用程序设置:

{
    "name": "FUNCTIONS_EXTENSION_VERSION",
    "value": "~4",
    "slotSetting": false
  },
  {
    "name": "FUNCTIONS_WORKER_RUNTIME",
    "value": "dotnet-isolated",
    "slotSetting": false
  }

我的实现装饰有:

[Function("myspecialfunction")]
public async Task Run([ServiceBusTrigger("myspecialqueue", Connection = "<secret>")] ServiceBusReceivedMessage message, ServiceBusMessageActions messageActions)

可能出了什么问题?

c# azure azure-functions azureservicebus
1个回答
0
投票

无法将输入参数“message”从“System.String”类型转换为“Azure.Messaging.ServiceBus.ServiceBusReceivedMessage”类型

您收到此错误是因为您无法将服务总线消息直接转换为字符串。

要将

ServiceBusReceivedMessage
- 转换为
String
,您需要使用
.ToString()
方法。

这对我有用。

using System;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace FunctionApp5
{
    public class Function1
    {
        private readonly ILogger<Function1> _logger;

        public Function1(ILogger<Function1> logger)
        {
            _logger = logger;
        }

        [Function("Function1")]
        public async Task Run(
            [ServiceBusTrigger("myqueue", Connection = "SB_conn")]
            ServiceBusReceivedMessage message,
            ServiceBusMessageActions messageActions)
        {
            _logger.LogInformation("Message ID: {id}", message.MessageId);
            _logger.LogInformation("Message Body: {body}", message.Body);
            _logger.LogInformation("Message Content-Type: {contentType}", message.ContentType);

            String stringmessage = message.Body.ToString();
            Console.WriteLine($"Type of stringmessage: {stringmessage.GetType()}");
            Console.WriteLine($"Type of message: {message.GetType()}");
            Console.WriteLine($"convert to string message: {stringmessage}");
             

            await messageActions.CompleteMessageAsync(message);
        }
    }
}

OUTPUT

© www.soinside.com 2019 - 2024. All rights reserved.