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中间 ...
随机推荐
- freemarker常用标签解释
标签一: if else 你可以使用if,elseif和else指令来条件判断是否越过模板的一个部分.这些condition-s必须计算成布尔值,否则错误将会中止模板处理.elseif-s和else- ...
- Linux中***配置
Ubuntu系统下: 1.执行如下命令 sudo apt install shadowsocks polipo 2.创建 shadowsocks.json 配置文件,放在你想放的位置 { " ...
- inner join、left join、right join、full join
A表 a1 b1 c1 01 数学 95 02 语文 90 03 英语 80 B表 a2 b2 01 张三 02 李四 04 王五 SQL语句:select A.*,B.* from A inner ...
- 74th LeetCode Weekly Contest Preimage Size of Factorial Zeroes Function
Let f(x) be the number of zeroes at the end of x!. (Recall that x! = 1 * 2 * 3 * ... * x, and by con ...
- linux学习四x系统指令
一.任务调度 任务调度:系统在某个时间执行特定的命令或者程序 如: 1.对于一些需要周期性执行的一些系统指令 2.定期的病毒扫描 3.定期数据库备份等 命令:crontab 设置任务调度文件: / ...
- Vue 中怎么发起请求(一)
1.vue 支持开发者引入 jquery 使用 $.ajax() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1.首先,在 package.json 中添加 j ...
- JavaScript base64多图上传
<div> <form action="/home/Uplod" method="post" enctype="multipart/ ...
- ETL的两种架构(ETL架构和ELT架构)
ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL一词 ...
- Python 类 面向对象(Classes)
Python 支持面向对象 class Greeter(object): #构造函数 def __init__(self,name): self.name = name # 创建一个实例变量 #定义一 ...
- win10重装完登录不了微软账号
in10重装完登录不了微软账号解决方法如下: 点击win键+R,然后输入services.msc回车,进入本地服务管理,查看以下服务是否正常启用了: Microsoft Account Sign-in ...