1

在 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 服务运行并使用带有 http 和 https 端点的 WebHttpBinding 的自托管本地 WCF 应用程序迁移(使用 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 调用以确定他们连接到哪个环境。谢谢!

4

1 回答 1

0

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

于 2018-04-11T16:42:55.340 回答