EWS Managed API 介绍(上)

EWS Managed API 介绍

一、什么是EWS Managed API

    要介绍什么是EWS Managed API首先要介绍什么是EWS,EWS的全称是Exchange Web Services,是Exchange 2007 之后推出的,它提供了一套访问Exchange资源的全新接口。EWS完成了一下几个目的:

  1. 提供Exchange资源的统一访问;
  2. 内置了与Outlook一致逻辑层;
  3. 给予web Service标准;
  4. 可远程访问。

EWS集成了原来WebDAV和CODEX的功能,它提供的相关功能使实现日程安排等操作非常容易,EWS是基于SOAP协议的XML Web Service,这使它可以被发送HTTPS请求的任何操作系统远程访问。

EWS是非常高效的Exchange资源访问接口,如果我们采用引用Web Service服务的方法来生产代理类访问EWS,这个可能是一个不好的方法,因为代理类是协议的直接映射,并且自动生成的代码使用起来非常不方便,实现一个简单的功能就要写一大堆代码,这些自动生产的代理类,难以使用和维护。

为了解决这些使用和维护的问题,微软在2009年10左右推出了Microsoft Exchange Web Services(EWS) Managed API。它是一个完全面向对象的API,就和.Net Framework类库一样,它基于WES XML协议,提供了非常容易学习、使用和维护的EWS.Net开发接口。

二、使用的前准备

  1.      首先要从微软官方网站上去下载EwsManagedApi.msi的一个安装包。下载完成后安装,安装成功后我们从安装目录中Copy我们所需要的Microsoft.Exchange.WebServices.dll和 Microsoft.Exchange.WebServices.xml 两个文件。然后在你的项目中添加引用那个DLL文件。

三、EWS Managed API 功能介绍

  1.  绑定WES

      在开始使用EWS Managed API之前,首先要初始化一个ExchangeService类的一个实例,代码如下:

实例化ExchageService
// 实例化ExchageService
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1;
// 指定用户名,密码,和域名
service.Credentials = new WebCredentials("username", "password", "domain");
// 指定Exchage服务的url地址
service.Url = new Url("your Exchange Service url Address");

我们在实例化ExchangeService时一般要指定Exchange的版本,如不指定将会有异常抛出。如果我们知道Exchange Service的地址直接给实例指定URL,如果不知道可以用EWS Managed API的Autodiscover服务,代码如下:

// 指定邮箱账号
service.AutodiscoverUrl("your e-mail address");

Autodiscover服务是EWS的一个核心部分,只要提供了Email地址,程序就会自动获取与服务器通讯的设置方式。

2.  ItemFolder的介绍

  在EWS Managed API中定义了Item和Folder的一个类的继承关系,每一个类就对应一个Exchange中的给定的类型,例如:EmailMessage 类就代表邮件消息,Appointment类则代表会议和日历中的事件。如下图片显示:

1)         Item类的继承关系:

2)         Folder类的继承关系:

每一个Item和Folder都一个唯一的标示(uniquely identified.),Item和Folder都有一个Id的属性对应这个唯一的标示,Item的Id类型是ItemId,folder的Id类型是FolderId。

如果知道这个唯一的标示,我们可以用Item和Folder类的静态方法Bind来获取对应的Item和Folder对象,示例代码如下:

代码
// 通过uniqueId来获取已存在的Email消息
EmailMessage message = EmailMessage.Bind(service, new ItemId(uniqueId));
//通过uniqueId来获取已存在的Folder信息
Folder folder = Folder.Bind(service, new FolderId(uniqueId));
如果我们不知道这个item的类型,可以用以下的方法获取:
//通过uniqueId来获取已存在的Item类型消息
Item item = Item.Bind(service, new ItemId(uniqueId));
if (item is EmailMessage)
{
}
else if (item is Appointment)
{
}
else
{
// Handle other types.
}

获取folder类型信息和上面的方法同理。

待续。。。。。。

posted @ 2010-10-19 20:53  五香瓜子  阅读(14681)  评论(9编辑  收藏  举报