DurableTask nuget 包升级到版本 2.0.0 时找不到 Azure 持久函数编排客户端

Ara*_*ash 1 .net-core azure-functions azure-durable-functions

将队列触发函数定义为以下示例:

public async Task OrchestratorAsync(
            [QueueTrigger("my-queue", Connection = "")]string payload,
            [OrchestrationClient] DurableOrchestrationClient orchestrationClient)
        {
            //Do something
        }
Run Code Online (Sandbox Code Playgroud)

csproj 文件看起来像以下详细信息,并且编译成功:


<PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="1.8.2" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.10" />
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.29" />
  </ItemGroup>
</project>
Run Code Online (Sandbox Code Playgroud)

当我升级Microsoft.Azure.WebJobs.Extensions.DurableTask到 2.0.0 版时,编译器会在无法找到 OrchestrationClient 和 DurableOrchestrationClient 时抛出错误。所以我们坚持使用 1.8.2 版!这个问题的解决方案是什么?

注意:这个问题在 VS 2019 中可以重现。让它搭建一个 Function 项目,创建另一个函数作为一个持久的编排器,调整 csproj 文件并将 DurableTask nuget 包版本从默认的 1.8.2 提高到 2.0.0。

1_1*_*1_1 9

我重现了你的错误,我解决了这个问题。

using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace _11111fc
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<List<string>> RunOrchestrator(
            [OrchestrationTrigger] IDurableOrchestrationContext context,
            [DurableClient] IDurableOrchestrationClient orchestrationClient)
        {
            var outputs = new List<string>();

            // Replace "hello" with the name of your Durable Activity Function.
            outputs.Add(await context.CallActivityAsync<string>("Function1_Hello", "Tokyo"));
            outputs.Add(await context.CallActivityAsync<string>("Function1_Hello", "Seattle"));
            outputs.Add(await context.CallActivityAsync<string>("Function1_Hello", "London"));

            // returns ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
            return outputs;
        }

        [FunctionName("Function1_Hello")]
        public static string SayHello([ActivityTrigger] string name, ILogger log)
        {
            log.LogInformation($"Saying hello to {name}.");
            return $"Hello {name}!";
        }

        [FunctionName("Function1_HttpStart")]
        public static async Task<HttpResponseMessage> HttpStart(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")]HttpRequestMessage req,
            [DurableClient]IDurableOrchestrationClient starter,
            ILogger log)
        {
            // Function input comes from the request content.
            string instanceId = await starter.StartNewAsync("Function1", null);

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

            return starter.CreateCheckStatusResponse(req, instanceId);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方案:

将 [OrchestrationClient] 更改为 [DurableClient]。看看这个。请注意 中的重大更改Durable Functions v2.0.0-beta2 ReleaseOrchestrationClient已重命名。

我这边一切正常。请在你身边试一试。