在 Azure 中管理将代码更改部署到开发、测试和生产环境的好方法是什么? Azure/Service Fabric 站点提供了一篇使用操作指南 - 管理应用程序生命周期 (https://learn.microsoft.com/en-us/azure/service-fabric/service-fabric-how-to-specify-port-number-using-parameters) 下的参数指定端口号的文章,但我不确定如何管理主机名 - 是否有与主机名相关的属性可以包含在发布配置文件.xml文件(例如 Cloud.xml)中?
背景:我正在从作为 Windows 服务运行的自托管本地 WCF 应用程序迁移,并将 WebHttpBinding 与 http 和 https 端点一起使用(根据环境使用 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 调用,以确定它们连接到哪个环境。 谢谢!
我认为你不能这样做,因为在提供的示例中,主机变量表示运行服务的确切节点。如果您打开适当的端口,则可以使用群集名称访问它,例如 http://mycluster.eastus.cloudapp.azure.com:19081/MyApp/MyService