Azure functions Azure函数上的服务结构客户端-无法加载DLL';FabricClient.dll';或者它的一个依赖项

Azure functions Azure函数上的服务结构客户端-无法加载DLL';FabricClient.dll';或者它的一个依赖项,azure-functions,azure-service-fabric,Azure Functions,Azure Service Fabric,我有一个在Azure函数上运行的应用程序,包括一个使用.NET的Service Fabric客户端API管理Service Fabric群集上运行的应用程序和服务的类 当我从VisualStudio以调试模式在本地运行该应用程序时,它就会工作,并且到服务结构集群的连接也会按预期工作。当我将应用程序部署到Azure功能时,使用Service Fabric Client API会导致异常: 执行结果:无法加载DLL“FabricClient.DLL”或其一个 依赖项:找不到指定的模块。(不适用于 H

我有一个在Azure函数上运行的应用程序,包括一个使用.NET的Service Fabric客户端API管理Service Fabric群集上运行的应用程序和服务的类

当我从VisualStudio以调试模式在本地运行该应用程序时,它就会工作,并且到服务结构集群的连接也会按预期工作。当我将应用程序部署到Azure功能时,使用Service Fabric Client API会导致异常:

执行结果:无法加载DLL“FabricClient.DLL”或其一个 依赖项:找不到指定的模块。(不适用于 HRESULT:0x8007007E)

下面是简化的代码

// SfClientApiHelper.cs

    using System.Fabric;
    using System.Fabric.Description;

    namespace MyService
    {
        class SfClientApiHelper
        {
            private FabricClient Client { get; set; }
            . . .
            public SfClientApiHelper()
            {
                . . .
                this.Client = new FabricClient();
            }

// ClassUsingSfClientApiHelper.cs
         . . .
    SfClientApiHelper sfHelper = new SfClientApiHelper();  // => exception
我已在Visual Studio项目上安装了Microsoft.ServiceFabric包。我已经从安装了Azure Functions CLI tools的win-x64版本,并且构建目标设置为x64;这些都是有指导性的(和)。项目是使用zip部署发布到Azure函数的,我从zip部署包中检查它是否包含库“System.Fabric.dll”,并根据指导使用CorFlags.exe检查它是否为x64

在讨论中,另一个可怜的家伙“tank140”最终遇到了同样的例外。据我所知,讨论没有达成任何决议

在本地运行的开发PC上找到丢失的DLL。FabricClient.dll位于文件夹C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code中。可能是因为我在电脑上安装了Service Fabric SDK。 如何将此DLL包含在Function Apps项目中以部署到Azure函数

我在代码中看到了FabricClient类的定义(见下图),根据VisualStudio,该类是在程序集“System.Fabric.dll”中定义的。如图所示,这包含在NuGet包“Microsoft.ServiceFabric”的项目中。如前所述,此程序集也包含在部署zip包中。在我看来,与VS项目和现实存在一些不匹配;FabricClient类在本地部署中可从依赖项中未声明的程序集访问


您需要在平台上安装SF运行时

我不确定这是否有效,但也许您可以使用预先安装了运行时的容器来实现这一点

您可以使用一个名为microsoft/service fabric reliableservices windowsservercore的映像。 并创建一个Azure函数,该函数运行带有自定义映像的(Linux)容器


如果您只创建一个管理其他应用程序和服务的服务,并在集群上运行它,可能会简单得多。

MS回答我的支持请求:

服务结构.Net API不可用于Azure函数,因为 is要求在上安装Service Fabric SDK和运行时 无法使用Azure功能完成的平台

那么你的情况呢 可用的选项是将应用程序重建到 使用ServiceFabricRESTAPI,它应该能够在上运行 Azure功能

除了在虚拟机上运行之外,另一个选择是 创建用于安装服务的自定义windows容器 Fabric SDK和运行时,并将其部署到Azure中 容器


目前,我们有一个中间主机(Azure VM),它正在处理来自Azure功能应用程序的请求,以操纵SF集群。目标是摆脱这个中间主机,看看我们是否可以使用SF客户机API来实现这一点。原则上,建议的解决方案与我们当前的配置类似。如果通过使用SF客户端API需要安装SF运行时的主机,则当前的方法是一条死胡同。您认为在没有主机的情况下使用Azure功能可行吗?谢谢您的帮助。微软对Azure支持票给出了和我在这篇文章中提出的相同的答案。