Exchange Web Services Managed API 1.0 大概是在微软在09年10月左右发布的目前国内的资料非常少,国外倒是还有一些比较好的资料。这是一篇入门级的文章,只希望能给大家一个简单的介绍,具体的更详细的大家可以在MSDN里面找。
Exchange在2007之后提供了Exchange Web Service(EWS),它提供了一个访问Exchange资源的全新接口。EWS达到了下面几个目标:
- 提供了Exchange资源的统一访问。
- 内置了与outlook一致的逻辑层(换句话说,用outlook能做的操作,用EWS 也能做到)
- 基于Web Service标准
- 可远程访问
EWS集合了原来WebDAV和CODEX的功能,它提供的相关功能使实现日程安排等操作非常容易。EWS是基于SOAP协议的XML WebService,这使它能够被可以发送HTTPS请求的任何操作系统远程访问。
Exchange2007 SP1提供了一些Exchange2007最初发布所不包含的功能,比如delegate管理,公共文件夹管理,Exchange2010将会包含更多新的EWS功能,包括文件夹关联项的访问,用户配置对象访问(这些对象让开发者可以通过邮箱保存和检索用户配置),Distribution lists的完全控制,增强时区支持。。
EWS是非常高效的Exchange资源访问接口。如果采用自动生成的代理类来访问EWS,比如在使用在Vistual Studio中新增Web Service引用服务的方法,对于一个复杂应用来说,并不是一个好的方法。可能还是要写一大堆的代码,因为那些代理类只是协议的直接映射。且自动生成的代码使用起来非常不方便(比如Vistual Studio 生成的一些晦涩难懂的属性),这些都让自动生成的代理类难以使用和维护。
为了解决这些使用和维护的问题,我们推出了Microsoft Exchange Web Services (EWS) Managed API
最佳的Exchange .NET开发
EWS Managed API是一个完全的面向对象的API,就像.Net Framework 类库一样。它基于EWS XML 协议,提供了非常容易学习,使用和维护的Exchange Web Service .NET开发接口,无论是初学者,还是有丰富经验的开发者都能发现它相对于代理类的优势。
尽管EWS Managed API是一个全新的API(意味着我们要在应用中添加新的程序集),但必须明白一点:它并没有替代EWS 协议。它仅仅为.Net开发者实现了EWS协议。这表示以前的代码还是可以使用的。无论使用最基本XML(比如Javascript程序员使用的),还是采用代理类与EWS通信,以前的应用都是可以继续使用的。EWS协议一直会是Exhange的一项功能,所有在EWS协议中添加的功能,也会在EWS Manage API所有体现。
使用就是如此简单
EWS Manged API 确实比代理类有极大的改进。下面是检索文件夹属性的代码,将会对两种方法进行对比,先是采用代理类,然后是采用EWS Managed API.
用代理类检索文件夹属性:
GetFolderType request = new GetFolderType();
request.FolderShape = new FolderResponseShapeType();
request.FolderShape.BaseShape = DefaultShapeNamesType.AllProperties;
DistinguishedFolderIdType inboxId = new DistinguishedFolderIdType();
inboxId.Id = DistinguishedFolderIdNameType.inbox;
request.FolderIds = new BaseFolderIdType[] { inboxId };
GetFolderResponseType response = serviceBinding.GetFolder(request);
FolderInfoResponseMessageType responseMessage
= response.ResponseMessages.Items[0] as FolderInfoResponseMessageType;
if (responseMessage.ResponseClass == ResponseClassType.Success)
{
FolderType inbox = responseMessage.Folders[0] as FolderType;
}
用EWS Managed API检索文件夹属性:
Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
(呵呵,确实简化了很多代码。。)
EWS Managed API 功能:
下面将体会到使用该API的简单,让我们来看看它的一些功能:
绑定EWS
在开始使用EWS Managed API之前,我们先要初始化一个ExchangeService类的一个实例。代码如下
using Microsoft.Exchange.WebServices.Data;
...
ExchangeService service = new ExchangeService();
service.Credentials = new NetworkCredential("name", "pwd", "domain");
service.Url = new Uri(https://myserver/EWS/Exchange.asmx);
ExchangeService类有许多有用的方法,比如FindItems, FindAppointments, DeleteItems 和 AddDelegates, 可以通过vs 的职能感知查看相关函数:
EWS Managed API 智能感知
可喜的是:EWS Managed API 也支持Exchange 2007 SP1 ,你可以在ExchangeService的构造函数中指定Exchange的版本。
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
可以采用同一个版本的EWS Manged API 指定不同版本的Exchange,它可以同时支持Exchange 2007 SP1和Exchange 2010,当然必须注意如果你指定了Exchange 2007 SP1 版本,与Exchange 2010相关的功能就不能使用了,如果使用了将会抛出异常。
使用 Autodiscover
Autodiscover服务是Exchange2007 和Exchange 2010架构中的一个核心部分。采用Autodiscover,程序可以自动获取到与服务器通信的设置方式,比如Exchange Web Services的URL。
Exchange Web Services Managed API提供了一个内置的Autodiscover客户端API,我们不再需要下载Exchange Server Software Development Kit (SDK),从Autodiscover 示例中拷贝代码。因为现在调用Autodiscover服务就只要一个方法。代码如下:
ExchangeService service = new ExchangeService();
service.Credentials = new NetworkCredential("name", "pwd", "domain");
service.AutodiscoverUrl(someone@contoso.com);
Exchange 2010 将会提供一个新的基于SOAP的Autodiscover服务,下面代码是采用EWS Managed API的方式
using Microsoft.Exchange.WebServices.Autodiscover;
...
AutodiscoverService autodiscover = new AutodiscoverService("contoso.com");
autodiscover.Credentials = new NetworkCredential("name", "pwd", "domain");
GetUserSettingsResponse response = autodiscover.GetUserSettings(
"someone@contoso.com",
UserSettingName.ExternalEwsUrl,
UserSettingName.InternalEwsUrl);
处理 项目和文件夹
EWS Managed API提供了项目和文件夹的所有操作功能,包括以面向对象的方式创建,更新,删除。下面的代码展示了这些功能。
在收件箱中创建文件夹
Folder folder = new Folder(service);
folder.DisplayName = "My new folder";
folder.Save(WellKnownFolderName.Inbox);
创建和保存草稿
EmailMessage message = new EmailMessage(service);
message.Subject = "Hello from the EWS Managed API";
message.Body = "Now that's easy!";
message.ToRecipients.Add("someone@fabrikam.com");
message.Save();
发送邮件且保存副本
message.SendAndSaveCopy();
注意:保存副本不是必须的!
绑定且更新联系人
Contact contact = Contact.Bind(service, new ItemId("abcdef"));
contact.CompanyName = "Fabrikam";
contact.Update(ConflictResolutionMode.AutoResolve);
删除联系人
contact.Delete(DeleteMode.HardDelete);
创建周期性的会议
Appointment appointment = new Appointment(service);
appointment.Subject = "Play tennis";
appointment.Body = "Let's play tennis for an hour every Saturday at 10AM";
appointment.Start = new DateTime(2008, 12, 20, 10, 00, 00);
appointment.End = appointment.Start.AddHours(1);
appointment.RequiredAttendees.Add("someone@fabrikam.com");
appointment.Recurrence = new Recurrence.WeeklyPattern(
appointment.Start.Date,
1 /* Every week */,
DayOfWeek.Saturday);
appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy);
上面的例子可以看出,每一个项目类型都有专门的类与其对应。这个概念和文件夹类似–每一个文件夹类型都有一个类与其对应。下面的图片展示了项目类和文件夹类的继承关系:
项目类继承关系:
文件夹类继承关系:
使用Response对象
借助Exchange Web Services,Response对象能对项目进行一系列的操作,比如回复消息,接受会议请求。EWS Managed API封装了这些概念,给出了一种非常简单的使用方式。让我们看看下面的代码:
回复消息
EmailMessage message = EmailMessage.Bind(service, new ItemId("abcd"));
message.Reply("This is my reply!", true /* replyAll */);
发送且保存自定义的回复
ResponseMessage response = message.CreateReply(true /* replyAll */);
response.BodyPrefix = "This is my customized reply!"; response.CcRecipients.Add("someone@fabrikam.com");
response.SendAndSaveCopy();
接受会议请求
Appointment appointment = Appointment.Bind(service, new ItemId("abcd"));
appointment.CancelMeeting();
取消会议请求
Appointment appointment = Appointment.Bind(service, new ItemId("abcd"));
appointment.CancelMeeting();
搜索
EWS Managed API提供了非常完善的搜索功能,代码如下:
显示收件箱的所有子文件夹
FindFoldersResults findResults = service.FindFolders(
WellKnownFolderName.Inbox,
new FolderView(int.MaxValue));
收件箱中查找前10个重要且包含“API”项目
ItemView view = new ItemView(10);
// Return only ten items.
view.SearchFilter = new SearchFilter.SearchFilterCollection(
LogicalOperator.And,
new SearchFilter.IsEqualTo(ItemSchema.Importance, Importance.High),
new SearchFilter.ContainsSubstring(ItemSchema.Subject, "API"));
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, view);
查找文件夹对象
Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
inbox.FindItems(view);
创建一个新的搜索文件夹
SearchFolder searchFolder = new SearchFolder(service);
searchFolder.DisplayName = "My search folder";
searchFolder.SearchParameters.RootFolderIds.Add(WellKnownFolderName.Inbox);
searchFolder.SearchParameters.SearchFilter = new SearchFilter.SearchFilterCollection(
LogicalOperator.And,
new SearchFilter.IsEqualTo(ItemSchema.Importance, Importance.High),
new SearchFilter.ContainsSubstring(ItemSchema.Subject, "API"));
searchFolder.Save(WellKnownFolderName.SearchFolders);
更多内容
本文件仅仅介绍了EWS Managed API的一小部分功能,需要更多内容,可以到Microsoft Exchange Team Blog 或 Microsoft TechNet Forums: Development 查找。
最后再给大家提供点有用的东西:
EWS Managed API 函数参考:Exchange Web Services Managed API Reference.
EWS Managed API 1.0 程序集: 下载地址(如果地址失效,在Microsoft Download Center搜索”EWS API”就能找到新的下载地址了)
(大盛博客)
--全文结束,感谢您的阅读,本文永久链接--
相关推荐
微软Exchange Web服务(Microsoft.Exchange.WebServices,简称EWS)是一个应用程序编程接口(API),它允许开发者构建能够与Microsoft Exchange Server进行交互的应用程序。EWS是Exchange Server 2007及更高版本的...
This project aims to create a javax.mail.Store provider for Exchange mailboxes based on Microsoft's EWS API (Exchange WebService) availible for Exchange 2007 SP1 and later.
exchange web service java push email用于访问exchange邮件服务器与Java做交互
这个"WebService教程+实例+代码提示功能WebService实例.rar"压缩包文件显然包含了关于WebService的学习资料、实例代码和可能的代码提示功能,旨在帮助用户深入理解和实践WebService的开发。 首先,"教程地址.txt"很...
用camel-cxf调用webservice和发布一个webservice接口例子,首先启动QueryServiceMain主函数启动webservice接口,然后启动测试类TestWebservice。例子主要是实现java代码实现camel调用webservice接口
调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...
【标题】:Idea实现WebService实例 在Java开发中,WebService是一种常见的跨平台、跨语言的通信方式,它允许不同的应用程序之间交换数据。IntelliJ IDEA(简称Idea)是广受欢迎的Java集成开发环境,提供了强大的...
根据提供的文件信息,本文将详细解释一个简单的 WebService 示例,并深入探讨其中的关键概念和技术细节。 ### 一、WebService 概念 #### 1.1 WebService 定义 WebService 是一种支持通过网络进行调用的服务形式,...
WebserviceStudio是一款强大的Web服务测试和调用工具,版本为20。这款工具主要帮助开发者和测试人员方便地测试和调试他们的Web服务。以下是WebserviceStudio的一些核心功能和相关知识点: 1. **图形化界面**:...
在本案例中,我们关注的是一个特定的Web服务类型——WebService,它用于获取一个包含泛型对象的List。这个场景在分布式系统、微服务架构或者跨平台数据共享中非常常见。让我们深入探讨一下相关的知识点。 1. **...
本文将详细介绍 Oracle 调用 Webservice 的实现过程,包括 Webservice 的基本概念、 Java 编写简单的 WebService 实例、Oracle 服务器端配置、加载 JAR 包、测试调用 PHP Webservice 和 Java Webservice 等内容。...
然而,由于其自身不直接支持Web服务(WebService)的调用,开发者通常需要借助第三方库或者特定的技术来实现。本篇文章将详细讲解如何在C++中调用WebService,包括静态和动态方式,并探讨相关的源码实现。 首先,让...
WebServiceStudio是一款轻量级的Web服务测试工具,它允许开发者无需编写任何代码就能对Web服务进行快速、便捷的测试。这个工具特别适用于那些需要验证Web服务功能或调试接口的IT专业人员。在本文中,我们将深入探讨...
Web服务(WebService)是一种基于互联网的、平台独立的交互方式,它允许不同系统之间的应用程序进行通信。WebServiceStudio是一款专门用于调试和测试Web服务的工具,尤其适用于开发人员在开发过程中验证和测试Web...
在WinForm应用程序中调用WebService是一项常见的任务,它允许客户端应用程序与远程服务器上的服务进行交互,从而实现数据交换和功能扩展。以下是如何在WinForm中实现这一操作的详细步骤及涉及的相关知识点: 1. **...
WebserviceStudio20便是一款专门用于模拟Web服务客户端的测试工具,帮助开发者便捷地进行功能验证和性能测试。 WebserviceStudio20的核心功能主要包括以下几点: 1. **SOAP请求构造**:它允许用户直接在界面中输入...
WebService是一种基于XML(可扩展标记语言)的互联网通信标准,它允许不同的应用程序之间进行互操作。这个名为"WebService依赖jar以及xml.zip"的压缩包文件包含了一组用于构建和运行WebService所需的重要组件。 ...
### WebService的优势与劣势 #### 一、WebService概述 WebService是一种平台独立的、分布式的、基于互联网的应用程序接口(API),它使用标准的Internet协议(如HTTP)进行通信,并使用XML来交换数据。WebService...
### WebService概述与基本用法 #### 一、WebService简介 WebService是一种标准的跨平台通信方式,它允许在不同技术栈之间进行数据交换和服务交互。通过WebService,可以在不同的应用程序之间共享业务逻辑、数据和...
本主题聚焦于C#中的WebService客户端和服务器的交互,以及如何利用Json进行数据交换。Json(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易读性和易于编写而被广泛应用。 一、C# WebService简介 ...