Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将.Net核心应用程序部署到Linux Service Fabric群集_Linux_.net Core_Azure Service Fabric - Fatal编程技术网

将.Net核心应用程序部署到Linux Service Fabric群集

将.Net核心应用程序部署到Linux Service Fabric群集,linux,.net-core,azure-service-fabric,Linux,.net Core,Azure Service Fabric,我有一个用.NETCore编写的服务结构应用程序。它在本地WindowsSF集群上运行良好。它由一个没有web组件的无状态服务组成 我现在正试图将其部署到一个LinuxSF集群。我能够使用ServiceFabricOneBox实例在Docker中运行SF 我使用了从azuresfcsharp yeomen模板获得的entryPoint.sh文件,并更改了ServiceManifest.xml文件中的entryPoint程序节点。我还使用dotnetcli和-r ubuntu.16.04-x64开

我有一个用.NETCore编写的服务结构应用程序。它在本地WindowsSF集群上运行良好。它由一个没有web组件的无状态服务组成

我现在正试图将其部署到一个LinuxSF集群。我能够使用ServiceFabricOneBox实例在Docker中运行SF

我使用了从azuresfcsharp yeomen模板获得的entryPoint.sh文件,并更改了ServiceManifest.xml文件中的entryPoint程序节点。我还使用dotnetcli和-r ubuntu.16.04-x64开关编译我的项目

现在,当我尝试部署到我的SF集群时,我得到了

    Error event: SourceId='System.Hosting', Property='CodePackageActivation:Code:EntryPoint'.

There was an error during CodePackage activation.The service host terminated with exit code:32512

有什么想法吗?

我终于想出来了。我将在这里发布答案,但我也将继续并完成让在windows中开发的Service Fabric项目在Linux上运行的所有步骤

入口点 在SF项目的ServiceManifest.xml中,有一个EntryPoint/ExeHost/Program节点。在windows中,这指向由msbuild生成的exe。在Linux中没有这么多

  • 如果没有安装npm,请安装它
  • 运行
    npm i-g yo
  • 运行
    npm i-g发电机azuresfcsharp
  • 在测试文件夹中,运行
    yo-azuresfcsharp
当生成器运行时,它将为您提供一个SF项目文件夹和一个c#项目文件夹。转到SF项目/服务名称文件夹/代码。该文件夹中将包含两个名为entryPoint.sh和dotnet-include.sh的文件

您需要将它们添加到您的项目中,并将它们设置为“内容”和“始终复制”

最后,在servicemifest.xml中,将EntryPoint/ExeHost/Program节点更改为
EntryPoint.sh

编撰 使用VisualStudio编译将无法工作,因为您需要以linux运行时为目标

旁注—在编译之前,您需要了解服务结构包是如何布局的。在VisualStudio中右键单击SF项目,单击“包”,转到资源管理器中的SF项目文件夹,转到pkg,然后查看

在控制台窗口中,将cd刻录到包含您正在构建的服务的csproj文件的文件夹中。假设您正在解决方案根目录中名为
pkg
的文件夹中构建部署包。因此,请运行:

dotnet publish -o ..\pkg\YourServicePkg\Code -r ubuntu.16.04-x64
注意-pkg中的文件夹必须以pkg结尾

其他注意事项-请在此处查找可以作为目标的运行时列表。我只是碰巧用了unbuntu

完成程序包 最后,要完善部署包,您需要包文件夹根目录中的ApplicationManifest.xml文件、服务项目中的servicemifest.xml文件和服务项目中的Config文件夹。服务项目文件可以在PackageRoot中找到

因此,您将有:

pkg
|
-> ApplicationManifest.xml
-> YourServicePkg
    |
    -> ServiceManifest.xml
    -> Code (This is where you targeted dotnet publish)
    -> Config
Linux环境 现在您需要在本地运行它。我用了docker。是完整安装说明的链接,但我将在这里介绍基本内容

首先,您需要使用以下设置更新docker deamon配置:

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}
然后,拉出图像

docker pull servicefabricoss/service-fabric-onebox
您需要使用打开端口19080和19000

-p 19080:19080 -p 19000:19000
如果您一直在windows中使用Service Fabric本地群集管理器,则需要右键单击系统托盘中的图标,然后单击删除群集。然后当这一切结束时,你需要退出。你必须移除集群,否则会发生奇怪的事情

docker映像启动后,打开它的bash并运行
/setup.sh
,然后运行
/run.sh

部署 一旦SF在docker上运行并且您可以转到localhost:19080,就可以使用powershell进行部署了

首先,让我们测试我们的包,看看它是否有效

Test-ServiceFabricApplicationPackage .\pkg\  
如果这有效,让我们部署

Connect-ServiceFabricCluster localhost:19000
Register-ServiceFabricApplicationType -ApplicationPathInImageStore YourService
Remove-ServiceFabricApplicationPackage -ImageStoreConnectionString fabric:ImageStore -ApplicationPackagePathInImageStore YourService
New-ServiceFabricApplication -ApplicationName fabric:/YourService -ApplicationTypeVersion 1.0.0 -ApplicationTypeName YourServiceType
您的应用程序应该在Linux中启动

重要的 这就是我的原因,并导致退出代码:32512错误

我使用的是github,显然,行尾样式设置为windows。所以当我在另一台计算机上把它拉下来时,线的末端从LF变为CR LF

为了解决这个问题,我必须在Notepad++中打开受影响的文件,然后单击编辑->下线转换->Unix(LF)

我必须在ApplicationManifest.xml、所有ServiceManifest.xml文件以及所有entryPoint.sh和dotnet-include.sh文件上执行此操作。

可能重复的