开始使用Exchange Web Services 2010

25

我被要求使用.Net编写一个SOAP Web服务,作为EWS2010和应用服务器之间的中间件,前者以前使用WebDAV连接到Exchange。(据我所知,随着EWS2010的推出,WebDAV即将消失,因此应用服务器将无法像以前那样连接,而且没有WebDAV连接到EWS是非常困难的。理论上,用.Net实现应该比其他任何方法都容易...对吗?!

我的最终目标是能够为指定的Exchange账户获取创建/更新电子邮件、日历项、联系人和待办事项。(删除当前并不是必需的,但如果足够简单,我可能会在未来考虑加入它)。

起初我得到了一些示例代码,它确实可以工作,但我很快意识到它已经过时了。使用的类型和类在当前文档中找不到。例如,用于创建与Exchange服务器连接的方法为:

ExchangeService svc = new ExchangeService();
svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
svc.AutodiscoverUrl(AutoDiscoverEmailAddress);

就我所知,这是使用示例代码附带的程序集:Microsoft.Exchange.WebServices.dll ("MEWS")。

在意识到这不是当前标准的连接方式之前,我曾尝试在其基础上构建并添加了一个创建日历项的方法,该方法我从此处复制:

static void CreateAppointment(ExchangeServiceBinding esb)
{
    // Create the appointment.
    CalendarItemType appointment = new CalendarItemType();

    ...
}

一开始,我就遇到了ExchangeServiceExchangeServiceBinding("ESB")之间的区别;所以我开始谷歌搜索,试图找出如何获得ESB定义,使CreateAppointment方法可以编译。我发现了这篇博客文章,它解释了如何从WSDL生成代理类,我也做到了。

不幸的是,这引起了某些冲突,在原始程序集Microsoft.Exchange.WebServices.dll(随示例代码提供)中定义的类型与我的新EWS.dll程序集中的类型重叠(我从Exchange服务器提供的services.wsdl生成的代码编译而成)。

我排除了MEWS程序集,结果只让事情变得更糟。我从几个错误和警告变成了25个错误和2510个警告。所有种类的类型和方法都无法找到。显然有些问题。

所以我重新寻找线索。我找到了添加服务引用和Web引用的说明(即在VS2008中所需的额外步骤),我认为我又回到了正确的轨道上。

我删除了之前尝试过的所有程序集(实际上,现在只是排除了它们);并添加了一个服务引用https://my.exchange-server.com/ews/services.wsdl

现在只剩下1个错误和1个警告。

警告:
元素'transport'不能包含子元素'extendedProtectionPolicy',因为父元素的内容模型为空。

这是关于当我添加服务引用时对web.config所做的更改的参考;我刚刚在SO上找到了修复方法。正如指示的那样,我已将该部分注释掉,确实使警告消失了,真不错。

然而,错误却不那么容易解决:

错误:
找不到类型或命名空间名称“ExchangeService”(是否缺少using指令或程序集引用?)

这是与我用来创建EWS连接的函数有关的,该函数由每个Web方法调用:

private ExchangeService getService(String AutoDiscoverEmailAddress, String AuthEmailAddress, String AuthEmailPassword)
{
    ExchangeService svc = new ExchangeService();
    svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
    svc.AutodiscoverUrl(AutoDiscoverEmailAddress);
    return svc;
}

这个函数在示例代码中的MEWS装配件上完美地运作,但是ExchangeService类型不再可用(我检查过的第一件事情也不是ExchangeServiceBinding)。

现在,由于我没有按照文档中的任何指示(我在文档中找不到任何关于添加服务引用到您的Exchange服务器的services.wsdl的内容 - 但那似乎是迄今为止最好/最远的进展),我感觉自己像一个盲人。

我知道我需要找出应该替换ExchangeService / ExchangeServiceBinding的内容,实施并解决由此切换引起的任何错误......

但是我不知道如何做到这一点,或者在哪里寻找如何做到这一点的信息。谷歌“ExchangeService”和“ExchangeServiceBinding”似乎只会导致过时的博客文章和MSDN,迄今为止都没有什么帮助。

我应该用什么来替换ExchangeService / ExchangeServiceBinding?有没有其他比MSDN更好的文档介绍使用EWS?

1个回答

38
我建议使用托管的EWS API。与自己拼凑一切相比,这要容易得多。它支持Exchange 2007 SP1和Exchange 2010。我认为你会发现它更容易使用,并且可能会消除您的问题。
版本1: 从Microsoft下载
这是MSDN文档
版本2(感谢@ruffin!): 下载 - MSDN文档
提问者添加的内容: 有用的其他链接:
- 设置服务URL(手动或通过Autodiscover) - 使用EWS托管API - 关于常见任务的一些基本文档 - EWS托管API安装程序的下载 - 与上面相同的下载,还包括一些文档和Visual Studio的智能感应数据。

我们公司与微软有支持合同,所以昨天我和他们的开发人员支持团队成员通了电话,这基本上是他告诉我的。为了完整起见,我可能会编辑进一些他与我分享的链接。 - Adam Tuttle
3
哇,哇,如何使用托管的EWS API作为所选答案?托管的EWS API是Microsoft.Exchange.WebServices.dll,这就是Adam Tuttle最初使用的。我和Adam一样,所以任何意见都将不胜感激。请问有人能解释一下当前连接到Exchange服务器的方法吗?谢谢。 - ep1033
6
事实证明,我继承的概念验证代码所使用的DLL已经过时,而我最初基于的代码示例也是如此。这个答案给出了下载链接和文档链接,作为今后尝试完成相同任务的人的起点。 - Adam Tuttle
5
东西已经移动了。版本2可在以下链接下载:http://www.microsoft.com/en-us/download/details.aspx?id=35371,文档可在以下链接查看:http://msdn.microsoft.com/en-us/library/dd633709(v=exchg.80).aspx(目前至少是这样的!)。 - ruffin
3
这是另一个有用的链接,供那些正在对抗Exchange和EWS API的人使用:Exchange 2013 101 Code Samples。你可以在那里找到很多代码示例... - turdus-merula
1
未找到 https://msdn.microsoft.com/en-us/library/dd637749(EXCHG.80).aspx 相关内容。 - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接