重新启动Service Fabric节点后缺少自定义Config节的参数值

时间:2018-07-31 15:11:39

标签: azure-service-fabric service-fabric-on-premises

我们在Windows Server 2012 R2虚拟机上运行了一个3节点本地SF群集。其中,每个节点上都部署了一个无状态的ASP.NET WebApi服务实例。服务的启动代码使用以下代码从“自定义配置”部分读取数据库连接字符串:

public static string GetLogDatabaseConnectionString(ServiceContext context)
{
  var configPackage = context.CodePackageActivationContext.GetConfigurationPackageObject("Config");

  const string RuntimeParametersSectionName = "Cop_RuntimeParameters";
  var configSection = configPackage.Settings.Sections.FirstOrDefault(s => s.Name == RuntimeParametersSectionName);
  if (configSection == null)
  {
    throw new InvalidOperationException($"Missing Settings.xml section {RuntimeParametersSectionName}.");
  }

  const string LogDatabaseConnectionStringParameterName = "Cop_LogDatabaseConnectionString";
  var logDatabaseConnectionStringConfigParameter = configSection.Parameters.FirstOrDefault(p => p.Name == LogDatabaseConnectionStringParameterName);
  if ((logDatabaseConnectionStringConfigParameter == null) || string.IsNullOrWhiteSpace(logDatabaseConnectionStringConfigParameter.Value))
  {
    throw new InvalidOperationException(
      $"Missing parameter {LogDatabaseConnectionStringParameterName} in Settings.xml section {RuntimeParametersSectionName}.");
  }

  return logDatabaseConnectionStringConfigParameter.Value;
}

连接字符串的设置完全与此SO帖子-Where do you set and access run-time configuration parameters per environment for service fabric?中所述。

一切正常几天。昨天我们不得不重新启动一个SF节点(VM2)。重新启动后,服务启动代码开始引发有关配置中缺少InvalidOperationException参数的第二个Cop_LogDatabaseConnectionString异常。由于代码是从服务的构造函数中调用的,没有进行异常处理,因此SF无法启动服务。回收节点无济于事–唯一的补救方法是删除并重新部署服务类型和关联的应用程序类型。

我的问题是:SF配置系统停止返回在部署服务期间配置的值的可能原因是什么?

0 个答案:

没有答案