管理在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调用,以确定它们连接到哪个环境。谢谢!
答案 0 :(得分:0)
我认为你不能这样做,因为在提供的示例中,host变量代表运行服务的确切节点。如果打开相应的端口,则可以使用群集名称访问它,例如http://mycluster.eastus.cloudapp.azure.com:19081/MyApp/MyService