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(); ... }
马上,我遇到了ExchangeService
和ExchangeServiceBinding
(“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数据。