Exchange Web Services 2010入门

我的任务是在.Net中编写一个SOAP Web服务,作为EWS2010和之前使用WebDAV连接到Exchange的应用服务器之间的中间件。 ( 据我所知,WebDAV正在消失EWS2010,因此应用服务器将无法再像以前那样连接,并且在没有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程序EWS.dll类型重叠(我从生成的代码编译Exchange服务器提供的services.wsdl )。

我排除了MEWSassembly,这只会让事情变得更糟。 我从一些错误和警告转到了25个错误和2,510个警告。 没有找到各种类型和方法。 这里显然有些不对劲。

所以我回去追捕。 我找到了添加服务引用和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,到目前为止,这两者都没有被certificate是非常有用的。

我应该用什么替换ExchangeService / ExchangeServiceBinding ? 是否有其他位置使用EWS的文档比MSDN更好?

我建议转到Managed EWS API。 它比使用自己拼凑所有东西要容易得多。 它支持Exchange 2007 SP1和Exchange 2010.我认为您会发现它更容易使用,并且可能会消除您的问题。

版本1:这是从Microsoft下载的 。

以下是MSDN文档 。

对于版本2(感谢@ruffin!)

下载 – MSDN文档


提问者添加:

其他链接certificate有用:

  • 设置服务URL(手动或通过自动发现)
  • 使用EWS托管API – 有关常见任务的一些基本文档
  • 下载EWS托管API安装程序 – 与上述相同; 还包括一些visual studio的文档和intellisense数据。