上周开始一项工作,起因是因为QA同事发现我们开发的EAS hook不能在Exchange 2007 server上工作,而在Exchange 2010上可以正常工作。

  环境对比如下:

  1. Windows Server 2007 R2 Ent Sp1, Exchange 2007, IIS 7

  2. Windows Server 2007 R2 Ent Sp1, Exchange 2010, IIS 7

  操作系统,IIS版本均一致,只有Exchange版本不同,由于hook直接与IIS有关,所以最初也令自己疑惑。但是hook的本质是http module,放置在IIS中Microsoft-Server-ActiveSync下的Module中,这是与Exchange有关的。Debug过程中,一直没有发现原因,也从上周到现在,走了很多弯路。最后发现是与IIS中Application Pools中MSExchangeSyncAppPool的Managed pipeline mode有关。

  1. Exchange 2007环境下,pipleline mode(管道模式)默认是Classic(经典模式),Classic模式允许工作的http module只是Native module,即用C++开发的httpmodule。这样的开发方式体现了C++的优点,运行效率更高,更好的利用内存以及管理资源,但同时带来的缺点是相比于另一种方式,Managed module的开发效率更高,即用C#语言开发。

  2. Exchange 2010环境下,pipleline mode(管道模式)默认是Integrated(集成模式),Integrated模式允许Native和Managed module同时工作。

  这里要注意的是,Classic和Integrated在web.config文件中httpmodule,httphandler的标签是不同的。

  另外网上有很多文章,说http module从Classic模式向Integrated模式下转换时,改变web.config文件中标签就能使http module工作,但是经过我测试,这种方法是不行的。一种是Native方式开发,一种是托管代码,不能仅通过修改配置文件使其适应Classic与Integrated。所以我觉得Managed module方式开发的http module就只能在Integrated模式下工作。

  这也就是为什么我们产品的hook不能在Exchange 2007环境下工作,因为Exchange 2007影响下,IIS的MSExchangeSyncAppPool默认模式是Classic,而我们的hook是使用Managed方式开发的,仅适合Integrated模式。

  那如果我们把Exchange 2007的IIS MSExchangeSyncAppPool由Classic改为Integrated后,我们的hook是否能否工作呢?

答案是不能!

因为

  1. 经过测试发现,Exchange 2007仅在Classic模式下(默认),Active Sync才能工作,这时手机等设备才能连接至Exchange Server,才能从邮箱Sync邮件。而Exchange 2010仅在Integrated模式(默认)下,Active Sync才能工作。如果Active Sync不能工作,那我们的hook本来就是做Sync邮件时起作用,肯定不能工作。

  2. 从客户的角度,如果客户的IIS配置是默认的,我们的产品不应该去手动修改它,这样潜在可能造成损失,所以不能这样做!

  

  因此得出结论,针对于Active Sync的http module,在Exchange 2007环境下,只能采用Native的方式开发,即C++开发;Exchange 2010即以上版本环境下,只能用Managed的方式开发,即C#方式。当然这里讨论的只针对于Active Sync。

  所以下一步的工作,我将会用Native(C++)的方式来开发EAS hook(本质是httpmodule),到时开发的心得总结会及时记录在这里!:-)

  得到的经验教训:

1. 网上查资料,涉及技术的很多知识还是应查英文资料,例如msdn等网站。

2. 遇到问题,应先把问题搞清楚,做好测试记录,然后再定性分析,这次走了很多弯路,不要一头扎进网上资料中,而是要有思路,而后再做。

Active Sync与IIS7 Classic&Integrated模式,Exchange 2007&2010的关系的更多相关文章

  1. exchange 2007迁移到2010

    标签:exchange 2007 2010 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zpf666.blog.51cto.c ...

  2. IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解

    IIS 7.0 支持两种管道模式:一种是IIS 7.0最新提供的集成管道模式,另一种是经典管道模式,经典管道模式是由先前版本的IIS提供的. 我们可以通过应用程序池设置管道模式,这项功能对IIS管理员 ...

  3. IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求

    今天将开发好的ASP.NET站点部署到客户的服务器上后,发现了一个非常头疼的问题,那么就是IIS7的应用程序池是集成模式的话,ASP.NET项目中自定义的HttpModule会处理静态文件(.html ...

  4. Zabbix Agent active批量调整客户端为主动模式监控

    Zabbix Agent active批量调整客户端为主动模式监控 zabbix_server端当主机数量过多的时候,由Server端去收集数据,Zabbix会出现严重的性能问题,主要表现如下: 1. ...

  5. 安装部署及升级到Exchange Server 2010

    本文档详细的描述了,如何在Windows Server 2008 R2的环境下安装Exchange Server 2010,包括的内容有:   先检查组织环境: 1.请确保林的功能级别至少为 Wind ...

  6. 《Exchange Server 2010 SP1/SP2管理实践》——第2章 搭建Exchange实验环境2.1 网络环境规划...

    本节书摘来自异步社区<Exchange Server 2010 SP1/SP2管理实践>一书中的第2章,第2.1节,作者: 王淑江 更多章节内容可以访问云栖社区"异步社区&quo ...

  7. Exchange 2007 前端 IIS 内存占用过高

    已经碰见了好几次,在Exchange2007的场景中,前端角色所在服务器的w3wp.exe进程总是占用大量内存,以至于触发反压组件,停止了正常的邮件流投递,造成业务中断. 终于下决心查一下到底问题问题 ...

  8. Exchange Server 2010安装

    Exchange Server 2010安装  Exchange Server 2010是Microsoft最新的邮件服务器软件,功能比较强大.在此,我们在虚拟机中安装体验一下,主要步骤如下: (1) ...

  9. ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系

    ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...

随机推荐

  1. kuangbin专题十六 KMP&&扩展KMP HDU2087 剪花布条

    一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和小 ...

  2. ubuntu下中文乱码解决

    这个方法只对该用户有效. 方法二:修改/etc/environment,增加以下内容: LANGUAGE=”zh_CN:zh:en_US:en” LANG=zh_CN.GBK

  3. Linux进程控制理论及几种常见进程间通信机制

    1. Linux进程控制理论 ① 进程是一个具有一定独立功能的程序的一次运行活动(动态性.并发性.独立性.异步性). 进程的四要素: (1)有一段程序供其执行(不一定是一个进程所专有的),就像一场戏必 ...

  4. JS电话、手机号码验证

    function isTelephone(inpurStr) {            var partten = /^0(([1,2]\d)|([3-9]\d{2}))-\d{7,8}$/;     ...

  5. log4net独立配置文件配置(winfrom)

    log4net配置很多,具体配置步骤不细说,具体说出个人遇到的问题. 在winfrom和web应用程序中配置,在默认配置文件配置都没问题,因为EF也写在默认配置文件中,就会冲突解决办法就是将log4. ...

  6. ZoomEye(钟馗之眼)搜索技巧记录:

    做个记录方便查看 钟馗之眼: 指定搜索的组件:    app:组件名称    ver:组件版本    例:搜索 apache组件版本2.4:app:apache var:2.4指定搜素的端口:     ...

  7. Vue.js-----轻量高效的MVVM框架(五、计算属性)

    #基础例子 <div id="dr01"> <h4>#基础例子</h4> <div> num01={{num01}}, num02= ...

  8. java 与 数据库的连接

    Eclipse中使用SQL server 2017数据库 一.准备材料 要能够使用数据库就要有相应的JDBC,所以我们要去Microsoft官网下载https://www.microsoft.com/ ...

  9. css3制作梯形导航

    /*HTML*/<div class="nav"> <a href="javascript:;">首页</a> <a ...

  10. Engineer Assignment HDU - 6006 状压dp

    http://acm.split.hdu.edu.cn/showproblem.php?pid=6006 比赛的时候写了一个暴力,存暴力,过了,还46ms 那个暴力的思路是,预处理can[i][j]表 ...