为开发生命周期配置Azure ServiceFabric - 如何参数化主机名?

时间:2018-04-11 16:31:38

标签: azure deployment azure-service-fabric sdlc service-fabric-stateless

管理在Azure中的Dev,Test和Prod环境中部署代码更改的好方法是什么? Azure / Service Fabric站点提供了一篇文章,用于使用操作指南 - 管理应用程序生命周期(https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-how-to-specify-port-number-using-parameters)下的参数指定端口号,但我不确定如何管理主机名 - 是否有主机可以包含在Publish Profile .xml文件中的名称相关属性(例如,Cloud.xml)?

背景:我从作为Windows服务运行的自托管内部WCF应用程序迁移,并使用带有http和https端点的WebHttpBinding进行迁移(使用T4配置文件模板根据环境确定主机名和端口号)。我将其迁移到Azure ServiceFabric WcfCommunicationListener应用程序(类似于此处的示例:https://github.com/loekd/ServiceFabric.WcfCalc)....

internal sealed class ServiceFabricWcfService : StatelessService
{
    public ServiceFabricWcfService(StatelessServiceContext context) : base(context)

    protected override IEnumerable<ServiceInstanceListener> 
    CreateServiceInstanceListeners()
    {
        yield return new ServiceInstanceListener(CreateRestListener);   
    }

    private ICommunicationListener CreateRestListener(StatelessServiceContext context)
    {
        var host = context.NodeContext.IPAddressOrFQDN;
        var endpointConfig = context.CodePackageActivationContext.GetEndpoint("ServiceEndpoint");
        var port = endpointConfig.Port;
        var scheme = endpointConfig.Protocol.ToString();
        var uri = string.Format(CultureInfo.InvariantCulture, "{0}://{1}:{2}/webhost/", scheme, host, port);
        var listener = new WcfCommunicationListener<IJsonService>(context, new JsonServicePerCall(), new WebHttpBinding(WebHttpSecurityMode.None), new EndpointAddress(uri));
        var ep = listener.ServiceHost.Description.Endpoints.Last();
        ep.Behaviors.Add(new WebHttpBehavior());
        return listener;
    }
}

正如您所看到的,主机名是从StatelessServiceContext的NodeContext获得的 - 有没有一种好方法可以将其设置为针对每个环境定位不同的主机名?我的客户端需要能够根据主机名进行http / https调用,以确定它们连接到哪个环境。谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你不能这样做,因为在提供的示例中,host变量代表运行服务的确切节点。如果打开相应的端口,则可以使用群集名称访问它,例如http://mycluster.eastus.cloudapp.azure.com:19081/MyApp/MyService