如何控制服务结构applicationManifest或serviceManifest中的服务执行顺序?

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

在我的ServiceManifest.xml中,我有两个codePackages:第一个codepackage有一个设置入口点A和一个入口点B

  <CodePackage Name="Code" Version="1.0">
<SetupEntryPoint>
  <ExeHost>
    <Program>A.bat</Program>
    <WorkingFolder>CodePackage</WorkingFolder>
  </ExeHost>
</SetupEntryPoint>
<EntryPoint>
  <ExeHost>
    <Program>B.exe</Program>
    <WorkingFolder>Work</WorkingFolder>
  </ExeHost>
</EntryPoint>

第二个codepackage一个入口点c:

  <CodePackage Name="anotherCode" Version="1.0">
<EntryPoint>
  <ExeHost>
    <Program>C.exe</Program>
    <WorkingFolder>Work</WorkingFolder>
  </ExeHost>
</EntryPoint>

我想开始顺序是A> B> C,这意味着B将在A成功后执行,C将在B成功后执行。现在A将因为A而被执行firstyl。但我不知道如何控制B和C的顺序。

谢谢

azure azure-service-fabric
1个回答
0
投票

我不确定这个执行链的确切目的,但你想要做的事情是行不通的。

SetupEntryPoint旨在作为初始化脚本执行,以便为主程序(可执行文件)设置启动环境,例如创建文件夹,安装依赖项,复制数据等。它是一个特权入口点,默认情况下,在任何其他入口点之前使用与Service Fabric(通常为NETWORKSERVICE帐户)相同的凭据运行。 SetupEntryPoint避免长时间以高权限运行服务主机。

EntryPoint是主程序(可执行文件),它将在创建服务时始终运行,并不意味着在服务结构请求之前完成(停止),如果它确实停止,服务结构将把它作为失败启动它再次。

CodePackages旨在将多个程序(可执行文件)作为服务包中的单个服务连接。当针对这些服务类型之一实例化服务时,清单中声明的​​所有代码包都通过运行其入口点来激活。通常用于必须在同一节点上同时运行的两个可执行文件的情况下,一个示例是主应用程序和监视主应用程序的日志收集器或监视程序应用程序。当一个应用程序启动时,完整包将被复制到节点并激活代码包。

如果您正在尝试创建执行链,则应该:

  • 创建服务以保持此控制并按需创建(启动)和删除(停止)这些包,或
  • 创建一个脚本作为入口点,在先前完成之后继续运行这些可执行文件
© www.soinside.com 2019 - 2024. All rights reserved.