Windows Azure Cloud Service (19) 动态指定WCF的发布地址

简介:

Windows Azure Platform 系列文章目录

 

  在刚才的例子中,服务端和客户端都是通过配置文件明确指定了WCF的地址,而如果现在需要将此服务发布到别的Hosted Service,那么还需要响应地修改配置文件。并且,如果WCF使用的端口号发生变化,在修改了Windows Azure开放的Endpoint信息同时,开发人员还需要修改配置文件中的WCF部分。

  Windows Azure SDK附带的类库允许用户通过编程的方式获得当前Role Instance的IP地址以及所有Endpoint的信息,因此对于上述的问题可以通过代码的形式配置WCF服务,动态指定地址和端口号。

  首先打开服务端的配置文件,将system.serviceModel节点删除,以代码的方式来配置WCF服务。在WorkerRole的OnStart()方法里面创建ServiceHost,通过编程指定其地址、绑定和契约。

复制代码
//host the wcf service
_host=new ServiceHost(typeof(EchoService));
//retrieve the endpoint address
var endpoint=RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["EchoService"];
var address=new Uri(string.Format("net.tcp://{0}/EchoService"));
//add the endpoint into the wcf host
_host.AddServiceEndpoint(typeof(IEchoService),new NetTcpBinding(SecurityMode.None),address);
//open the host
_host.Opened += (sender,e) =>
{
Trace.TraceInformation("Listening at {0}",_host.Description.Endpoint[0].ListenUri);

};
_host.open();
复制代码

  在上面的代码中,RoleEnvironment类的CurrentRoleInstance属性返回当前Role Instance的状态和配置信息,包括ID、故障域(Fault Domin) ID、升级域(Upgrade Domain) ID以及Endpoint信息。通过Endpoint名字,开发人员便可以获得当前Instance下某个Endpoint的完整地址。在上面的代码中,我们通过EchoService这个名称获得了Input Endpoint的地址,然后将其格式化为合法的NET.TCP地址并配置到ServiceHost中。在这个例子中,由于事先为这个Role配置了两个Instance,所以这段代码会分别在两个Windows Azure虚拟机中执行,也就是说相同的WCF服务会被部署在两台机器上,通过代码获取到的Endpoint信息是不一样的。而客户端的请求都会通过Hosted Service URL进入Windows Azure负载均衡服务器,然后路由到这两个虚拟机中。

  除此之外还需要一些额外的修改工作。打开EchoService类,在类定义部分需要加入一个Service Behavior标签。为了测试在服务器端返回结果的时候加入一些额外的信息来显示当前的消息是由哪个Role Instance通过哪个Endpoint访问的。

复制代码
[ServiceBahavior(AddressFilterMode = AddressFilterMode.Any)]
public class EchoService : IEchoService
{
public string Echo(string content)
{
var date = DateTime.Now;
var instance = RoleEnvironmentCurrentRoleInstance.Id;
var endpoint = RoleEnvironmentCurrentRoleInstance.InstanceEndpoints["EchoService"];
return string.Format("[SERVER] {0} - {1}. (by {2} at {3})",
content.
date.ToString(),
instance,
endpoint.IPEndpoint);
}
}
复制代码

  现在讲修改后的服务发布到了Windows Azure平台,然后通过客户端程序测试。可以看到,客户端连接到Windows Azure上的Hosted Service URL,但是实际执行请求的是其中一个Instance。

  通过这种方式寄宿WCF服务,为什么要在代码中加入一个Service Behavior标签并且将AddressFilterMode设定为Any呢?我们知道在默认配置下,WCF会验证接收客户端请求的服务器地址和这个服务所发布的地址是否一致。如果一致,那么WCF将会处理这个请求,否则就不予处理。而此前通过配置文件寄宿的时候,由于WCF服务器发布的地址已经确定就是Hosted Servuce URL,即接收客户端请求的地址,因此不会出现什么问题。而在修改后的代码中,我们是动态获取当前Role Instance的地址配置ServiceHost。

  如上图所示,两个Role Instance都会获得一个在数据中心的内部IP地址,而WCF会被发布在各自虚拟机的这个外部地址上。客户端请求首先到达Windows Azure负载均衡服务器,也就是Hosted Service对外开放的VIP地址。然后负载均衡将会给予Service Model的配置将请求路由到某个Role Instance上面。所以可以看到,在这种情况下客户端的请求消息是在Load Balancer上,而最终执行这个请求缺是某个Role Instance上面的WCF服务,即获取客户端请求的地址和WCF的发布地址并不一致,因此默认情况下WCF将不会处理这个请求。加入AddressFilterMode.Any标签则要求WCF框架无需验证消息地址的一致性,直接处理请求。

 

本文摘自:徐子岩著的《实战Windows Azure 微软云计算平台技术详解》 电子工业出版社


本文转自Lei Zhang的博客博客园博客,原文链接:http://www.cnblogs.com/threestone/archive/2012/03/05/2379264.html,如需转载请自行联系原作者
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
编解码 数据挖掘 Windows
Office 2021 for Windows 简体中文 官网下载地址
Microsoft Office 2021 Pro Plus专业增强版包括对Word、Excel、PowerPoint、Outlook、Project、Visio、Access、Publisher、OneDrive、Teams的更新。
1269 0
|
编解码 数据挖掘 Windows
Office 2021 for Windows 简体中文 官网下载地址
Microsoft Office 2021 Pro Plus专业增强版包括对Word、Excel、PowerPoint、Outlook、OneNote、Publisher、Access、Teams的更新。
1194 0
|
安全 Windows
Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
|
11月前
|
Windows
Windows 10系统重装U盘启动工具制作方法实例演示,windows11镜像下载地址
Windows 10系统重装U盘启动工具制作方法实例演示,windows11镜像下载地址
189 0
|
11月前
|
Python Windows
Windows安装pip和pygame详细教程(附国内下载地址)
Windows安装pip和pygame详细教程(附国内下载地址)
299 0
|
数据中心 Windows
适用于windows && office 可用kms服务器激活地址汇总
windows && office 可用kms服务器激活地址汇总
适用于windows && office 可用kms服务器激活地址汇总
|
弹性计算 运维 Linux
《ECS运维指南之Windows系统诊断》下载地址
本书结合阿里云工程师多年云上ECS运维经验,从实战角度讲解windows,实例丰富,容易理解,内容实用,适合广大运维工程师学习。
65 0
《ECS运维指南之Windows系统诊断》下载地址
|
运维 Kubernetes 数据库
《云服务器运维之Windows篇》电子版地址下载
本书从技术原理到线上真实案例,从基础篇、进阶篇到高手篇,用11个章节,详解阿里云上Windows服务器运维要点,助你轻松掌握阿里云上Windows服务器运维的相关知识和技能!经出版社授权线上上架30%内容,更多详情可自行购买学习
106 0
《云服务器运维之Windows篇》电子版地址下载
|
弹性计算 运维 Linux
《ECS运维指南之Windows系统诊断》电子版下载地址
本书结合阿里云工程师多年云上ECS运维经验,从实战角度讲解windows,实例丰富,容易理解,内容实用,适合广大运维工程师学习。
81 1
《ECS运维指南之Windows系统诊断》电子版下载地址
|
运维 Kubernetes 数据库
《云服务器运维之Windows篇》电子版下载地址
本书从技术原理到线上真实案例,从基础篇、进阶篇到高手篇,用11个章节,详解阿里云上Windows服务器运维要点,助你轻松掌握阿里云上Windows服务器运维的相关知识和技能!经出版社授权线上上架30%内容,更多详情可自行购买学习
98 0
《云服务器运维之Windows篇》电子版下载地址