上周开始一项工作,起因是因为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. Arcgis Server for JavaScript API之自定义InfoWindow

    各位看到这个标题不要嫌烦,因为本人最近一直在研究相关的问题,所以相关文章也只能是这些,同时希望看过我的文章的朋友,我的文章能够给你帮助. 在前面的两篇相关的文章里面,实现InfoWindow是通过di ...

  2. Number BZOJ3275 最大流

    有N个正整数,需要从中选出一些数,使这些数的和最大. 若两个数a,b同时满足以下条件,则a,b不能同时被选 1:存在正整数C,使a*a+b*b=c*c 2:gcd(a,b)=1 Sample Outp ...

  3. 牛客寒假算法基础集训营4 C Applese 走迷宫

    链接:https://ac.nowcoder.com/acm/contest/330/C来源:牛客网 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×m迷宫 在迷宫 ...

  4. php暂停函数sleep()和usleep的区别

    在PHP中暂停代码执行一定时间,有两个函数可以实现,一个是sleep(),另一个是usleep(),它们参数都是一个整数值.sleep()是暂停多少秒,usleep()是暂停多少微秒. 注意:usle ...

  5. Java中利用JFrame创建窗体

    1. 一个简单例子: public class Test(){ public static void main(String[] args){ JFrame frame = new JFrame(); ...

  6. Laravel5.1接收json数据

    <?php namespace App\Http\Controllers;use Illuminate\Routing\Controller as BaseController; use Ill ...

  7. NorFlash基础

    1. Nor Flash 简介 Nor Flash 闪速存储器具有可靠性高.随机读取速度快的优势,在擦出和编程操作较少而直接执行代码的场合,尤其是纯代码存储的应用中广泛使用. 2. Nor Flash ...

  8. Spring Cloud 没移动完 到Ribbon

    一  Spring Cloud各组件简要介绍 1. Eureka 注册中心. 帮助我们做服务的注册.服务的发现以及接口的调用 2.  Ribbo 请求负载均衡 3.  Zuul 网关.做合法性的校验. ...

  9. 2.4 Rust Ownership

    What Is Ownership ownership这个单词有些不好翻译,刚开始就直接叫它“ownership”即可.这里简单说一下,我对它的理解, 从“数据结构与算法”的角度来看,ownershi ...

  10. 25-----BBS论坛

    BBS论坛(二十五) 25.1.发布帖子后台逻辑完成 (1)apps/models.py class PostModel(db.Model): __tablename__ = 'post' id = ...