我可以在 Azure Functions 2.0 中同时使用 dotnet 和 node 吗?

Can I use both dotnet and node in Azure Functions 2.0?

由于 Durable Functions JS API 目前受到限制,我想知道我是否可以使用 C# 脚本编写编排代码并使用 Azure Functions 2.0 中的节点编写 activity 函数?

更新

新版本已发布,功能应用目前需要单一语言。所以这个方法已经失效了。


您可能正在谈论这个 limit,因为在 JS 中,一些 C# API 尚未实现,有些将不会实现。

我们可以在C#编排函数中调用JS Activity。只需使用简单的 activity returns 字符串进行测试,即可按预期工作。

对于本地开发,FUNCTIONS_WORKER_RUNTIME(in local.settings.json)指定我们的function app language worker,只有这个runtime对应的function才能被function host识别。例如,在 dotnet runtime 中,js 函数被忽略。

  1. 删除FUNCTIONS_WORKER_RUNTIME,主机可以使用不同的语言。

  2. 将一个以你的Activity函数命名的文件夹添加到函数app文件夹,包含function.json和index.js。请参见下图(在 VSCode 中,类似于 )。

  3. 将 CopyToOutputDirectory 操作添加到 functionappname.csproj。

    <ItemGroup>
    ...
        <None Update="MyJsActivity\index.js">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
        <None Update="MyJsActivity\function.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
    </ItemGroup>
    
  4. 如果需要可以随意安装节点模块,记得为package.json添加CopyToOutputDirectory操作,这样我们就可以在部署过程中使用它安装模块。

除了门户网站上目前没有这样的等效设置外,主机默认提供不同语言的工作人员。部署后,一切正常。

我们即将发布 v2 Functions 版本,该版本取消了在单个 Function 应用程序中 运行 多种语言的功能。展望未来,函数应用程序中的所有函数都必须使用相同的语言编写。 (请注意,v1 函数应用程序不会受此影响。)

我们的目标是在今年晚些时候宣布 Durable Functions JS 的普遍可用性,其中将包括 API 的其余部分。我们目前推荐的解决方法类似于 documented here. 在您的情况下,您可以通过 HTTP 公开一些 JavaScript APIs 并让 C# activity 函数从 Function 调用它们包含您的 C# 编排器的应用程序。