Active Sync与IIS7 Classic&Integrated模式,Exchange 2007&2010的关系
上周开始一项工作,起因是因为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的关系的更多相关文章
- exchange 2007迁移到2010
标签:exchange 2007 2010 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zpf666.blog.51cto.c ...
- IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解
IIS 7.0 支持两种管道模式:一种是IIS 7.0最新提供的集成管道模式,另一种是经典管道模式,经典管道模式是由先前版本的IIS提供的. 我们可以通过应用程序池设置管道模式,这项功能对IIS管理员 ...
- IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求
今天将开发好的ASP.NET站点部署到客户的服务器上后,发现了一个非常头疼的问题,那么就是IIS7的应用程序池是集成模式的话,ASP.NET项目中自定义的HttpModule会处理静态文件(.html ...
- Zabbix Agent active批量调整客户端为主动模式监控
Zabbix Agent active批量调整客户端为主动模式监控 zabbix_server端当主机数量过多的时候,由Server端去收集数据,Zabbix会出现严重的性能问题,主要表现如下: 1. ...
- 安装部署及升级到Exchange Server 2010
本文档详细的描述了,如何在Windows Server 2008 R2的环境下安装Exchange Server 2010,包括的内容有: 先检查组织环境: 1.请确保林的功能级别至少为 Wind ...
- 《Exchange Server 2010 SP1/SP2管理实践》——第2章 搭建Exchange实验环境2.1 网络环境规划...
本节书摘来自异步社区<Exchange Server 2010 SP1/SP2管理实践>一书中的第2章,第2.1节,作者: 王淑江 更多章节内容可以访问云栖社区"异步社区&quo ...
- Exchange 2007 前端 IIS 内存占用过高
已经碰见了好几次,在Exchange2007的场景中,前端角色所在服务器的w3wp.exe进程总是占用大量内存,以至于触发反压组件,停止了正常的邮件流投递,造成业务中断. 终于下决心查一下到底问题问题 ...
- Exchange Server 2010安装
Exchange Server 2010安装 Exchange Server 2010是Microsoft最新的邮件服务器软件,功能比较强大.在此,我们在虚拟机中安装体验一下,主要步骤如下: (1) ...
- ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...
随机推荐
- sublime侧边栏管理sidebarEnhancements浏览器设置
sidebarEnhancements是为了增强sublime Text侧边栏功能的一个插件,但是同时也可以实现设置浏览器浏览当前文件的功能. Ctrl+Shift+p 输入package contr ...
- CSS(十二).transition的应用之CSS中心扩散
实现 css中心向两边扩散的两个核心 1.hover 之前的 垂直居中 2.文字置于最顶层 顺道来讲讲hover 伪元素是不支持 hover 的,不过我们可以给普通的 tag 标签添加 hover 以 ...
- Unity 移动 和 旋转 [小结]
[移动] Position: 说明: 直接修改位置数据 Translate: 说明: [匀速]朝着一个方向,一直移动. (dir * speed 可以控制速度)适合键盘控制物体上下左右运动 函数: ...
- chkconfig命令详细介绍
命令介绍 chkconfig命令用来更新.查询.修改不同运行级上的系统服务.比如安装了httpd服务,并且把启动的脚本放在了/etc/rc.d/init.d目录下,有时候需要开机自动启动它,而有时候则 ...
- Ubuntu上的Python
在Ubuntu如何查看Python版本 2版本命令:Python -V (注意是大写) 3版本命令:Python3 -V Ubutun16上默认安装Python 2.7, Python3 将Pyth ...
- http协议&接口规范&接口测试入门
http协议 请求: 请求行:请求方法.url(协议名://ip;端口/工程名/资源路径).协议版本 请求头 :键值对 请求正文 响应: 响应行:协议版本.响应状态码.响应状态码描述 响应头 :键值对 ...
- Problem04 分解质因数
题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的 ...
- XAMPP 更换其它路径
打开安装路径: xampp\apache\conf\httpd.conf DocumentRoot “C:/xampp/htdocs” <Directory “C:/xampp/htdocs”& ...
- Silverlight TreeView 带 checkbox和图片
前段时间做Silverlight TreeView 控件,但是要带checkbox和图片,在网上到处找相关的例子,效果图如下 xaml代码 <UserControl x:Class=" ...
- Mybatis学习笔记11 - 动态sql之trim标签
trim标签体中是整个字符串拼串后的结果.prefix="" 前缀: prefix给拼串后的整个字符串加一个前缀prefixOverrides="" 前缀覆盖: ...