azure 如何在c#代码中访问applicationmanifest中指定的applicationtypes

rta7y2nd  于 12个月前  发布在  C#
关注(0)|答案(1)|浏览(124)

如何在运行时访问c#代码中applicationmanifest中指定的ApplicationTypeName
我尝试了var applicationTypeName = FabricRuntime.GetActivationContext().ApplicationTypeName; var applicationName = FabricRuntime.GetActivationContext().ApplicationName; if (tracer != null) { tracer.Log($"applicationTypeName:{applicationTypeName}"); tracer.Log($"applicationName:{applicationName}"); },但这是给我服务名称类型而不是应用程序名称类型。
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="xyz" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
在这个例子中,我希望xyz被获取。

svgewumm

svgewumm1#

  • 在Service Fabric服务中,不能从服务代码中直接访问应用程序清单中指定的ApplicationTypeName

我们可以在运行时动态地检索和检查应用程序清单。

using System.Fabric;

class YourService : StatelessService
{
    public YourService(StatelessServiceContext context)
        : base(context)
    {
        try
        {
            var activationContext = context.CodePackageActivationContext;

            if (activationContext != null)
            {
                var applicationTypeName = activationContext.ApplicationTypeName;
                ServiceEventSource.Current.ServiceMessage(this, $"ApplicationTypeName: {applicationTypeName}");      
            }
            else
            {
                // Log an error or handle the null activationContext case
                ServiceEventSource.Current.ServiceMessage(this, "Error: Activation context is null.");
            }
        }
        catch (Exception ex)
        {
            // Log an error or handle the exception
            ServiceEventSource.Current.ServiceMessage(this, $"An error occurred: {ex.Message}");
        }
    }
}

字符串

  • 使用context.CodePackageActivationContext直接访问StatelessService中的激活上下文。

在这里检查这个SO link,他使用FabricClient查询应用程序清单,然后将其转换为基于XSD模式的对象。通过这种方式,他能够访问该对象的属性,例如ApplicationTypeName

ServiceManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest ...>
  <ServiceTypes>
    <StatelessServiceType ...>
      <!-- Other configuration settings -->
      <ConfigurationOverrides>
        <ConfigOverrides Name="Config">
          <Settings>
            <Section Name="ApplicationInfo">
              <Parameter Name="ApplicationTypeName" Value="xyz" />
            </Section>
          </Settings>
        </ConfigOverrides>
      </ConfigurationOverrides>
    </StatelessServiceType>
  </ServiceTypes>
  <!-- ... -->
</ServiceManifest>

相关问题