azure-service-fabric - 如何自定义服务 list 文件的创建?

标签 azure-service-fabric

当我向 Service Fabric 项目添加新 Actor 时,该服务会自动添加到我的 ApplicationManifest.xmlServiceManifest.xml 文件中,因为我们有 UpdateServiceFabricManifestEnabled 设置为 true。对于某些项目,我们需要要求服务具有PlacementConstraints,以便将它们部署到正确的节点。

如何 Hook 此流程,以便可以指定 PlacementConstraints,而无需记住编辑任何 list 文件?

最佳答案

作为构建的一部分,服务 list 文件会自动填充参与者服务类型。有一个 MSBuild 目标在执行此操作的内置“Build”目标之后运行。您可以添加在此之后运行的自己的逻辑。在该逻辑中,您可以对服务 list 文件进行任何必要的更改。下面的示例确保将放置约束添加到服务 list 文件中的所有服务类型。它使用内联 MSBuild 任务,但您可以将其重写以包含在已编译的程序集中或您想要执行的任何操作中。

此示例应放置在您的 Actor 服务项目中的文件末尾:

<UsingTask TaskName="EnsurePlacementConstraints" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
  <ParameterGroup>
    <ServiceManifestPath ParameterType="System.String" Required="true" />
  </ParameterGroup>
  <Task>
    <Reference Include="System.Xml" />
    <Reference Include="System.Xml.Linq" />
    <Using Namespace="System.Xml.Linq" />
    <Code Type="Fragment" Language="cs">
    <![CDATA[
const string FabricNamespace = "http://schemas.microsoft.com/2011/01/fabric";
XDocument serviceManifest = XDocument.Load(ServiceManifestPath);
IEnumerable<XElement> serviceTypes = serviceManifest.Root.Element(XName.Get("ServiceTypes", FabricNamespace)).Elements();
bool changesMade = false;
foreach (XElement serviceType in serviceTypes)
{
  XName placementConstraintsName = XName.Get("PlacementConstraints", FabricNamespace);
  if (serviceType.Element(placementConstraintsName) == null)
  {
    XElement placementConstraints = new XElement(placementConstraintsName);
    placementConstraints.Value = "(add your contraints here)";
    serviceType.AddFirst(placementConstraints);
    changesMade = true;
  }
}

if (changesMade)
{
    serviceManifest.Save(ServiceManifestPath);
}
    ]]>
    </Code>
  </Task>
</UsingTask>

<Target Name="EnsurePlacementConstraints" AfterTargets="Build">   
  <EnsurePlacementConstraints ServiceManifestPath="$(MSBuildThisFileDirectory)\PackageRoot\ServiceManifest.xml" />
</Target>

关于azure-service-fabric - 如何自定义服务 list 文件的创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36757692/

相关文章:

azure - Nano Server上部署Fabric集群时出现"Win32Exception: The subsystem needed to support the image type is not present"

c# - 如何在 Service Fabric 中使用 .NET Core 的内置依赖注入(inject)

azure - 服务结构 asp .net core IoC 错误 : cannot be dynamically proxied

azure - 无法在 VS 2015 RC 中重复 F5 部署 OWIN Service Fabric 应用程序

azure - 尝试访问 Service Fabric 服务时出现 ERR_CONNECTION_TIMED_OUT

windows - 什么是 Windows Fabric 以及如何在其中托管服务?

powershell - 启动服务: Failed to start service 'Microsoft Service Fabric Host Service (FabricHostSvc)'

Azure Service Fabric 与 Project Orleans 中的参与者粒度

customization - 我可以自定义 Azure Service Fabric vm 节点吗?

c# - 值类型的依赖注入(inject)