Active Sync与IIS7 Classic&Integrated模式,Exchange 2007&2010的关系

  上周开始一项工做,原由是由于QA同事发现咱们开发的EAS hook不能在Exchange 2007 server上工做,而在Exchange 2010上能够正常工做。web

  环境对好比下:测试

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

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

  操做系统,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#语言开发。server

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

  这里要注意的是,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. 遇到问题,应先把问题搞清楚,作好测试记录,而后再定性分析,此次走了不少弯路,不要一头扎进网上资料中,而是要有思路,然后再作。

相关文章
相关标签/搜索