在前面我们聊Outlook Anywhere的文章里头,我提到了MAPI over HTTP这个Exchange Server 2013 SP1中新增加的功能,这次这篇文章咱们就详细说说这个新的传输协议是什么,以及实战如何去配置它。
什么是MAPI/HTTP,有什么好处?
以前版本中(Exchange 2010),用的是RPC over HTTP(外部网络outlook anywhere)以及RPC Direct(内部网络)连接,Exchange 2013里,所有的连接都通过Outlook Anywhere,也就是RPC over HTTP来传输;到即将到来的Exchange 2016,至少我现在看到的风声是,将所有的RPC over HTTP替换成 MAPI over HTTP了。所以在Ex2013 SP1里,微软先推出了这个特性来试试水,看看收效如何。那么咱们也不要背道而驰,照着微软的战略也来学习配置看看。
咱们还是来看看这两张图,进行一个初步的分析。上面一张是旧的RPC/HTTP的传输过程,可以发现其实传输的流量封装层次是MAPI/RPC/HTTP这样一个三层封装,每次Outlook客户端进行连接都需要进行RPC_DATA_IN和RPC_DATA_OUT这么个来回2次的过程,再加上HTTPS与MAPI的连接。服务器和客户端之间会生成2个TCP长连接,4个活动连接。
下面一张图则是Mapi Over HTTP,可以看到将整个MAPI连接移到了标准的HTTP请求/响应模型上。这样就会减少客户端与服务器之间的连接,它们之间最大会存在2个活动连接,1个长连接和1个按需短连接(下文会提到这个按需)。
从上面两张图里还可以看到,一个是MAPI/RPC/HTTP,另一个是MAPI/HTTP,取消了整个RPC封装。取消了这一层封装也意味着取消了这一层的请求和回应。这就是为什么上面会提到连接数减少的原因。
减少连接数和降低封装的层数带来的直接好处就是降低客户端与服务器之间的交互时间,或者说,是更为贴近现代化场景(无线网络和远程办公网络)的设计。据微软自己吹牛逼说,当用户第一次配置好账号打开Outlook的时候停留在LOGO框的时间减少了70%……
另外一个特点就是,上面提到了的按需连接,它其实可以被理解为一个15分钟内有效的连接窗口,当客户端第一次与服务器建立连接完毕之后,MBX上会留出这么一个连接窗口进行按需连接,按什么需呢?重新连接的需求,也就是说客户端的网络短暂断开了之后,再进行重连,它就直接走这个窗口连进来,无需重复之前的验证过程。微软也吹牛逼说:同样休眠起来的笔记本电脑,用MAPI/HTTP的比用RPC/HTTP的重连时间短10秒……
这个时间窗口会在以后的版本中提的更大。
还有另外的一个特点,之前的RPC连接及其不具有可维护性(只能通过一些专门的微软的内部工具来进行debug),现在则是咱们的老朋友HTTP封装,不光提供了日志,甚至还有debug信息窗口。要知道RPC进程挂死这种故障只能通过重启来解决……
微软的路线就是慢慢去RPC化。然而这些特性都是从O365里学来的,在之前2016架构前瞻的文章里我也提到,微软很多新概念都被应用到O365上,然后觉得成熟了再做成功能特性给on-premises用户。
OK,咱们再说一下客户端是如何使用MAPI/HTTP与服务器进行连接的:
1、 Outlook客户端,发现自己是MAPI/HTTP兼容的客户端,就在autodiscover请求里带上一个参数X-MapiHTTPCapability=1
2、 服务器收到了这个autodiscover请求,发现有Mapi/HTTP参数,于是响应MAPI/HTTP的配置信息给客户端。配置信息里包括连接URL验证方法等等,当然前提是你的服务器已经打开了这个功能。
3、 Outlook收到这些信息之后发现它可以跟服务器建立Mapi/HTTP连接,于是告诉用户重启Outlook,如果用户不重启Outlook,则会继续使用RPC over HTTP
配置要求:
讲了这么多理论了,咱们开始实际配置一下这玩意儿,首先是MAPI over HTTP的一些前提条件。
对于服务器:Exchange Server 2013 SP1必需,再加个.Net Framework 4.5.2,你可能在有些文档里看到需要KB2908387/KB2908385/KB2908383这几个补丁,这几个hotfix现在只能联系MCS才能下载了…所以打个.Net Framework4.5.2吧
客户端要求:outlook 2013 SP1,outlook 2010 SP2 以及更新 KB2956191 和 KB2965295
配置步骤:
在所有的的CAS服务器上添加系统变量:变量名和值见下图:
接下来配置Mapi虚拟目录,本身在Exchange 2013 SP1安装的时候,就已经部署好了Mapi的虚拟目录。但是默认的,只配置好了internalURL,所以如果要对外访问,那么就得再配置一下ExternalUrl和外部访问时所用的验证方式。命令为
Set-MapiVirtualDirectory –Identity “EX01\mapi (default web site)” -ExternalUrl -IISAuthenticationMethods Negotiate
注意这里为什么IIS验证要配置成协商呢?因为MAPI/HTTP是按照HTTP的套路进行验证的,即客户端发送一个anonymous的HTTP请求,然后Exchange就在HTTP的层面告诉他验证方法,而不用autodiscover再去宣告验证方法。所以按照标准给个协商方法就可以了。
最后一步,为整个组织开启MapiOverHTTP功能。命令:
Set-OrganizationConfig –MapiHttpEnabled $True
OK,到这里MAPI/HTTP功能就正式配置完毕了,为确保生效,最好是按照顺序重启一下组织里的所有Ex服务器,有些人说我只重启CAS或者只重启MBX就生效了嘛,反正我在配置时的场景是多台全角色,我就都给重启了~
如何确定MAPI/HTTP生效了呢,重启完服务器之后,让客户端再进行一次自动发现,客户端就会蹦个报错出来:
然后咱按照提示,重启Outlook,再看一下连接状态,就会发现,没有代理服务器了并且后面的协议里只有HTTP,验证方法为协商,SSL加密。服务器名称也是连接到了mapi的虚拟目录上的终结点。
下面来一张RPC/HTTP的连接状态图,大家可以做参考
客户端上另外一个变化是,如下图,outlook anywhere的配置没了~
这样咱们就是配置成功了,接下来再多说一点,关于MAPI/HTTP的debug。首先是Mapi/HTTP的日志的存放路径:
CAS服务器: %ExchangeInstallPath%\Logging\HttpProxy\Mapi\
Mailbox服务器: %ExchangeInstallPath%\Logging\MAPI Client Access\
Mailbox服务器: %ExchangeInstallPath%\Logging\MAPI Address Book Service\
然后,你可以通过https://CAS的FQDN/MAPI/emsmdb/来进行一个连接检测,需要输入凭据
更详细的信息,则是在上面一个url的后面再接上一个?showdebug=yes,就是https://cas的fqdn/mapi/emsmdb/?showdebug=yes
这个里面的信息更为详细,详细到这次请求交互的每一步都给你列出来。有做HTTP基础的同学一定不会陌生了。
如果客户端想临时关掉MAPI/HTTP这个功能,使用RPC/HTTP功能的话,ok没问题,改注册表吧:
HKEY\CURRENT USER\Software\MicrosoftExchange => 创建一个dword值 “MapiHttpDisabled” 值为1
然后重新打开Outlook,执行重新Autodiscover。改回使用MAPI/HTTP就把这个值改成0。
最后再来几点注意事项:
1. 开启了Mapi over HTTP之后,Outlook 2013 SP1无法通过Ex2013SP1去访问早期版本的公共文件夹。
2. CAS服务器上的CPU使用率会上升,但是内存使用率下降,约50%-60%每用户
3. 无法使用MAPI Over HTTP时,Outlook会自动回退到RPC over HTTP
4. UAG 2010 SP4目前不支持MAPI Over HTTP的发布
5. Exchange 2016当中也许会默认使用MAPI over HTTP
本篇文章也有对应的教学视频