切换到宽版
Exchange 中文站
Exchange 2003
Exchange 2007
Exchange 2010
Exchange 2013
勋章中心
下拉
用户名
电子邮箱
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
Exchange论坛
Exchange视频
Exchange技术论坛
>
Exchange 二次开发
>
Exchange Server 2007 二次开发 (一)
发帖
回复
返回列表
11827
阅读
1
回复
[分享]
Exchange Server 2007 二次开发 (一)
[复制链接]
上一主题
下一主题
it的那点事儿
UID:11430
注册时间
2011-02-13
最后登录
2011-02-24
在线时间
6小时
发帖
3
搜Ta的帖子
精华
0
金币
20
访问TA的空间
加好友
用道具
技术学徒
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
加关注
发消息
只看楼主
倒序阅读
0楼
发表于: 2011-02-19
关键词:
服务器
Outlook
2003
exchange
OWA
因为项目的需要,要与
Exchange
Server 2007进行整合,就学习了一下EWS(Exchange Web Service),以下是学习过程中的学习笔记。
刚开始学习,就在网上搜索关于这方面的内容,发现了一篇不错的入门文章,推荐给大家。
作者:
IT168 耿锐丽
2007-09-06
Exchange Server2007
已经面市将近一年了,相信大家一定对它的强大功能已经有所体验了,其中值得我们关注的就是Exchange Server 2007将web service的应用开发引入到CAS(Client Access Server)中,给开发人员带来了福音。现在就让我们一起来学习一下Exchange Server 2007 Web Service的新特性和它的二次开发的相关技术吧。
一、 Exchange Server 2007 Web Service新特性
用Web Service将存储访问进行了整合:早期对Exchange Server进行开发,需要了解和掌握许多技术和协议,比如CDO,WebDav以及
OWA
URL命令,现在Web Service将这些复杂的技术协议进行了整合和替换。
对于消息,日程安排,联系人等提供了强类型对象:Exchange Web Service(EWS)中调用的对象和数据类型都是通过WSDL(Web Service Define Language)来定义和描述的,每种数据类型都是强类型的对象,这对于开发来说是非常好的特性。
与微软的visual studio及.net framework进行了有效地整合:开发人员能够利用C# 或 VB.NET 等开发语言建立
自定义
的应用系统。企业可以使用这些应用系统来执行消息通信环境中的一般管理任务。
提供了一些新的API函数来获得Exchange server2007 CAS的数据:开发人员可以从任何客户端、语言或平台调用这些API,将Exchange Server 2007 邮箱或日历中的信息插入商业或其他自定义应用系统。
提供远程的访问:例如早期我们开发了Exchange Server的某个应用,那么我们就需要将其部署到Exchange Server上,但一般来说开发人员和系统管理员分属不同的部门和人员,所以这种部署必须得到系统管理员的允许,也许还需要开放一些额外的防火墙端口。现在如果是用Web Service开发的应用,我们就可以将其放在任何一台计算机上而无需专门部署到Server上。
通过Exchange Business Logic Layer可以灵活地与
Outlook
进行交互。
二、 为什么要使用Web Service
我们都知道利用Web Service进行开发具有非常好的扩展性,Web Service允许在不同平台上、以不同语言编写的各种程序以基于标准的方式相互通信。微软在Exchange Server2007中引入Web Service也是大势所趋。Exchange Server2003 以前的很多应用是很难跨过内网的限制,比如说用于存储访问的API主要目的是获取和管理邮件,日程安排及用户属性等信息,对于开发人员来说如果要操作这些信息,只能利用MAPI或CDO1.2.1来开发应用程序。而对于开发外网的应用也只可以利用WebDAV,熟悉WebDAV的人都知道它也是OWA2000和OWA2003广泛使用的协议,但WebDAV从开发难度大,整个开发成本相对比较大,由此可见在Exchange Server2003或更早期,如果要对Exchange Server进行二次开发是非常难的事,开发人员需要区分应用程序是应用到内部网络还是外部网从而选择相应的开发方式,这就要求开发人员必须熟悉很多协议和API接口。现在应用Exchange Web Service进行开发不但降低开发应用程序的难度同时也打破了网络限制,我们可以将Exchange Web Service理解为就是一个Exchange Server二次开发的接口,这个接口可以让我们的程序运行在80 或443接口之上,利用这个接口开发的应用程序无需再考虑是在内部网络部署还是在Internet上部署,这样就可以更灵活地管理Exchange Server组织结构并调用邮箱或用户等信息。
三、 如何利用Exchange Server 2007 Web Service进行二次开发
Exchange Web Service API
工作流程
Exchange Server 2007 web service也是基于标准的Web Service实现原理的:HTTP/XML/SOAP/WSDL 基于这种标准的实现,我们就能很容易地理解Exchange Web service API 工作流程:它是一种基于客户端访问/服务器端响应的方式,通过这种响应来完成数据传输,功能执行,消息提醒等功能。
当客户端要发送一个请求或执行一个操作时,首先需要将所要执行的操作构建成XML元素,接下来就需要对XML的传输创建一个SOAP消息,创建完SOAP消息以后,就需要对XML消息进行序列化,以便于通过HTTP协议进行传输,然后作为一个请求进行发送,客户端发送请求以后就会被
服务器
接受,服务器接受以后就会执行相应的操作,解除序列化,提取出XML的信息,按照客户端的要求执行操作。最后会将执行的结果作为响应发送回客户端,客户端会执行与服务端相同的操作,解除序列化,提取XML消息。
开发前的环境部署
正如我们前面所提到的,Exchange Web Service是应用在CAS上的,因此我们需要一台装有Exchange server2007 Client Access(客户端访问)角色的服务器,来引用EWS。在这台服务器上我们可以从IIS的默认网站下面找到虚拟目录EWS。在这个虚拟目录下面主要有以下几个文件:
Services.wsdl:描述客户端和服务器之间的约定。
Messages.xsd:定义请求和响应的SOAP。
Types.xsd:定义了在Soap消息中使用的元素。
Exchange.asmx:定义了EWS的Web引用。
编写一个Web Service的应用一般分为四个步骤:
(1)创建代理对象引用参考。
在Visual Stadio 2005 中,当我们建立完一个新的工程后,就可以为这个工程添加一个Web引用,我们在这里引用的就是一台装有Client Access 角色的服务器上的EWS虚拟目录下的Services.wsdl文件。
(2)设置ExchangeServiceBinding代理类。
完成Web引用后,我们就可以用以下的语句来完成Service的绑定。
ExchangeServiceBinding esb = new ExchangeServiceBinding();
esb.Credentials = new NetworkCredential("administrator", "J$p1ter", " DFQVPI-dom");
esb.Url = "https://bjextest043/EWS/exchange.asmx";
(3)创建并调用操作。
CreateItemType createEmailRequest = new CreateItemType();
MessageType message = new MessageType();
message.Subject = "Mail Test";
createEmailRequest.Items.Items = new ItemType[1];
createEmailRequest.Items.Items[0] = message;
(4) 发送请求并处理响应。
CreateItemResponseType createItemResponse = esb.CreateItem(createEmailRequest);
接下来我们就以为用户创建邮件信息应用为例,向大家全面地展示一下如何利用Exchange Web Service进行二次开发。
private void SendMail(ExchangeServiceBinding esb)
{
//
创建 CreateItem 的请求
CreateItemType createEmailRequest = new CreateItemType();
//确定 Mail的处理方式
createEmailRequest.MessageDisposition = MessageDispositionType.SendAndSaveCopy;
createEmailRequest.MessageDispositionSpecified = true;
//确定发送信息存放的位置
createEmailRequest.SavedItemFolderId = new TargetFolderIdType();
DistinguishedFolderIdType sentitmes = new DistinguishedFolderIdType();
sentitmes.Id = DistinguishedFolderIdNameType.sentitems;
createEmailRequest.SavedItemFolderId.Item = sentitmes;
//创建存放数组
createEmailRequest.Items = new NonEmptyArrayOfAllItemsType();
//创建 e-mail 信息
MessageType message = new MessageType();
message.Subject = "Mail Test";
message.Body = new BodyType();
message.Body.BodyType1 = BodyTypeType.Text;
message.Body.Value = "TOoo Busy!!!!.";
message.Sender = new SingleRecipientType();
message.Sender.Item = new EmailAddressType();
message.Sender.Item.EmailAddress = "
Administrator@DFQVPI-dom.extest.microsoft.com
";
message.ToRecipients = new EmailAddressType[1];
message.ToRecipients[0] = new EmailAddressType();
message.ToRecipients[0].EmailAddress = Receiver;
message.Sensitivity = SensitivityChoicesType.Normal;
createEmailRequest.Items.Items = new ItemType[1];
createEmailRequest.Items.Items[0] = message;
try
{
// 创建绑定
ExchangeServiceBinding esb = new ExchangeServiceBinding();
esb.Credentials = new NetworkCredential("administrator", "J$p1ter", " DFQVPI-dom");
esb.Url = "https://bjextest043/EWS/exchange.asmx";
//发送CreateItem的请求
CreateItemResponseType createItemResponse = esb.CreateItem(createEmailRequest);
ArrayOfResponseMessagesType responseMessages = createItemResponse.ResponseMessages;
}
catch (Exception ex)
{
throw new Exception("Warning: " + ex.Message);
}
}
Exchange Web Service
是一个新的开发技术,在未来的日子它会得到更效地发展和完善,如果大家有兴趣的话可以尽早投入到这项新技术中,经过自己的实践与思考,定会成为这项新技术的专家。
共
条评分
回复
举报
分享到
script
UID:11734
注册时间
2011-03-09
最后登录
2015-02-02
在线时间
37小时
发帖
89
搜Ta的帖子
精华
0
金币
170
访问TA的空间
加好友
用道具
技术人员
加关注
发消息
只看该作者
1楼
发表于: 2011-03-09
Exchange的开发要好好学啊!
共
条评分
回复
举报
发帖
回复
返回列表
http://bbs.exchangecn.com
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
快速回复
限60 字节
您目前还是游客,请
登录
或
注册
进入高级模式
文字颜色
发 布
回复后跳转到最后一页
上一个
下一个
关闭
补充发布信息
验证码:
验证问题:
92 + 5 = ?
发 布
隐藏
快速跳转
Microsoft 企业云服务
Office 365 定制版用户讨论区
Exchange 技术讨论
Exchange Server 2016
Exchange Server 2013
Exchange Server 2010
Exchange Server 2007
Exchange Server 2003
Exchange 相关技术
Exchange 事件日志
Exchange 二次开发
Microsoft Outlook
Exchange 资源下载
Exchange 2003 资源下载
Exchange 2007 资源下载
Exchange 2010 资源下载
Exchange 招聘求职
Exchange 招聘 | 求职
Exchange 社区站务
站内站务
关闭
关闭
选中
1
篇
全选