c# - 默认服务描述不能作为升级的一部分进行修改 将 EnableDefaultServicesUpgrade 设置为 true

标签 c# azure-service-fabric

我正在尝试通过 Visual Studio 升级我的 Service Fabric 应用程序。

我最终不得不使用 diff 包方法来确保只有我更改的服务才会升级。

我通过命令文件执行此操作,删除了不需要的文件。

现在我遇到了另一个错误,该错误因其缺乏细节而令人烦恼:

Start-ServiceFabricApplicationUpgrade : Default service descriptions can not be modified as part of upgrade. Modified 
2>default service: fabric:/MYAPPLICATION/MYSERVICE. To allow it, set 
2>EnableDefaultServicesUpgrade to true.

我到底该把它放在哪里?

请注意,这是来自 Visual Studio。

我很少从使用 PowerShell 中获得任何乐趣。

我已经看到对 Update-ServiceFabricService CmdLet 的引用,但没有更多关于我需要做什么的信息。

我在应用程序 list 中尝试过此操作,但没有成功:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="MyServiceFabricApplication.ServiceFabricType" ApplicationTypeVersion="7.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="EnableDefaultServicesUpgrade" DefaultValue="true" />
    <Parameter Name="MyParameter" DefaultValue="value" />
    Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service1.ServiceFabricPkg" ServiceManifestVersion="4.0.0" />
    <ConfigOverrides>
      <ConfigOverride Name="Config">
        <Settings>
          <Section Name="appSettings">
            <Parameter Name="MyParameter" Value="[MyParameter]" />
          </Section>
        </Settings>
      </ConfigOverride>
    </ConfigOverrides>
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service2.ServiceFabricPkg" ServiceManifestVersion="2.0.0" />
    <ConfigOverrides>
      <ConfigOverride Name="Config">
        <Settings>
          <Section Name="appSettings">
            <Parameter Name="MyParameter" Value="[MyParameter]" />
          </Section>
        </Settings>
      </ConfigOverride>
    </ConfigOverrides>
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service3.ServiceFabricPkg" ServiceManifestVersion="3.0.0" />
    <ConfigOverrides>
      <ConfigOverride Name="Config">
        <Settings>
          <Section Name="appSettings">
            <Parameter Name="MyParameter" Value="[MyParameter]" />
          </Section>
        </Settings>
      </ConfigOverride>
    </ConfigOverrides>
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service4.ServiceFabricPkg" ServiceManifestVersion="2.0.0" />
    <ConfigOverrides>
      <ConfigOverride Name="Config">
        <Settings>
          <Section Name="appSettings">
            <Parameter Name="MyParameter" Value="[MyParameter]" />
          </Section>
        </Settings>
      </ConfigOverride>
    </ConfigOverrides>
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.PlatformApi.ServiceFabricPkg" ServiceManifestVersion="2.0.0" />
    <ConfigOverrides>
      <ConfigOverride Name="Config">
        <Settings>
          <Section Name="appSettings">
            <Parameter Name="MyParameter" Value="[MyParameter]" />
          </Section>
        </Settings>
      </ConfigOverride>
    </ConfigOverrides>
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.LivePriceManager.ServiceFabricPkg" ServiceManifestVersion="3.0.0" />
    <ConfigOverrides>
      <ConfigOverride Name="Config">
        <Settings>
          <Section Name="appSettings">
            <Parameter Name="MyParameter" Value="[MyParameter]" />
          </Section>
        </Settings>
      </ConfigOverride>
    </ConfigOverrides>
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service5.ServiceFabricPkg" ServiceManifestVersion="3.0.0" />
    <ConfigOverrides>
      <ConfigOverride Name="Config">
        <Settings>
          <Section Name="appSettings">
            <Parameter Name="MyParameter" Value="[MyParameter]" />
          </Section>
        </Settings>
      </ConfigOverride>
    </ConfigOverrides>
  </ServiceManifestImport>
  <DefaultServices>
    <Service Name="Service1" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="MyServiceFabricApplication.Service1.ServiceFabricType">
        <SingletonPartition />
      </StatelessService>
    </Service>
    <Service Name="Service2" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="MyServiceFabricApplication.Service2.ServiceFabricType">
        <SingletonPartition />
      </StatelessService>
    </Service>
    <Service Name="Service3" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="MyServiceFabricApplication.Service3.ServiceFabricType">
        <SingletonPartition />
      </StatelessService>
    </Service>
    <Service Name="Service7" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="MyServiceFabricApplication.Service7.ServiceFabricType">
        <SingletonPartition />
      </StatelessService>
    </Service>
    <Service Name="Service5" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="MyServiceFabricApplication.Service5.ServiceFabricType">
        <SingletonPartition />
      </StatelessService>
    </Service>
    <Service Name="Service6" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="MyServiceFabricApplication.Service6.ServiceFabricType">
        <SingletonPartition />
      </StatelessService>
    </Service>
    <Service Name="Service4" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="MyServiceFabricApplication.Service4.ServiceFabricType">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

保罗

最佳答案

首先,在给你解决方案之前,我先给出一个理由......

EnableDefaultServicesUpgrade 是一个标志,允许在应用程序升级期间升级默认服务描述。设置为 true 时,默认服务描述将被新值覆盖,这是为了防止意外更改描述而导致可能的故障或数据丢失。

  • 当设置为false(默认)时,它将进行检查以防止发生故障,
  • 设置为true时,您将承担这些更改安全的风险

一个例子是,当您更改服务中的分区数量时,SF 预测这将导致数据丢失或其他故障。

修复:

EnableDefaultServicesUpgrade 是集群定义中的标志,而不是服务中的标志。您必须在集群 list 中进行设置。

您的集群 list 将有一个如下所示的部分:

...some stuff above...
{
  "name": "ClusterManager",
  "parameters": [
  {
    "name": "EnableDefaultServicesUpgrade",
    "value": true
  }]
  ... some more stuf below
 }

要在Azure上更改它:

您可以使用门户'http://resources.azure.com ' 如 this link 中所述

本地集群上:

从集群安装文件夹复制 clusterconfig.json,使用以下命令应用更改并触发集群升级 Start-ServiceFabricClusterConfigurationUpgrade -ClusterConfigPath .\clusterconfig.json

顺便说一下...

您正在使用 DefaultServices,您应该避免它,有很多关于为什么的问题。

关于c# - 默认服务描述不能作为升级的一部分进行修改 将 EnableDefaultServicesUpgrade 设置为 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51798976/

相关文章:

c# - 如何将发件人地址设置为其他gmail中的任何电子邮件(通过Gmail在.NET中发送电子邮件)?

c# - 找不到匹配的 ExtType

c# - DataTable 上的表达式树

spring-boot - 自托管 MS 服务结构 : Deploying Spring Boot to Windows?

azure-service-fabric - HTTPS 终结点在 Service Fabric 本地群集中不起作用

azure - Azure Service Fabric 中的副本 ID 真正代表什么?

c# - EF Core 3.1 到 5 更新 -> IEntityType.GetTableName

c# - 如果始终在本地评估 Skip 和 Take,我如何在 EF Core 中运行分页查询?

azure-service-fabric - 重新启动 vmss 后 Service Fabric 应用程序被删除

azure - 与 Actor 进行即发即忘消息传递?