如何从引用的nuget包加载azure活动函数

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

我已经实现了Azure持久功能,如您所知,它包含我的Orchestration,Orchestrator和Activities。 关键是我的一个活动是在另一个程序集中实现的,我将它作为一个nuget包引用。 现在的问题是,当我在Visual Studio中运行我的解决方案时,AzureFunctionsTools加载了所有Azure函数,但是没有列出位于nuget包中的此活动,我面临以下错误消息:

错误:“MyExternalActivity”不存在,已禁用或不是活动功能。附加信息:以下是已知的活动功能:'MyLocalActivity'。

这是我在nuget项目中的MyExternalActivity定义:

[FunctionName(FunctionName)]
public async Task<object> Run([ActivityTrigger] DurableActivityContextBase context) 
{
...
}

这是我的Orchestrator类:

[FunctionName(FunctionName)]
public static async Task RunOrchestrator([OrchestrationTrigger] DurableOrchestrationContextBase context, ILogger log)
 {
    ...
    await context.CallActivityAsync<object>("MyLocalActivity", parameters); // Successfull; code is in this solution
    ...   
    ...
    await context.CallActivityAsync<object>("MyExternalActivity" , parameters); // Error; Referenced by nuget package
    ...
}

注意:我尝试删除引用并将nuget代码项目添加到同一解决方案并通过项目直接引用,但同样的错误发生

c# azure service cloud azure-durable-functions
1个回答
3
投票

您遇到此问题的原因是因为调用其他函数与调用其他项目或nuget包中的方法不同。它们是完全独立的实体,因此添加引用不会导致包含活动功能。

实现此目的的正确方法是在单个项目中定义两个函数。你绝对可以将函数定义变成一个shell,然后调用nuget包中的代码。

[FunctionName(FunctionName)]
public async Task<object> Run([ActivityTrigger] DurableActivityContextBase context) 
{
    MethodFromNugetPackage(context);
}

如果您想在不同的项目中使用这些功能,可以选择以下几种方法:

1)在Azure中有多个功能服务。

2)关闭“删除目标中的其他文件”部署代码。这假设您正在从Visual Studio进行部署,因此如果您使用不同的部署方法,则需要查找并调整等效设置。要明确这一点,不建议这样做,因为你可能遇到难以追查的问题,但它应该有效。 enter image description here

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.