Exchange Web 服务 2010 入门
-
20-09-2019 - |
题
我的任务是在 .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
程序集(我从生成的代码编译的 services.wsdl
由 Exchange 服务器提供)。
我排除了 MEWS 组件,这只会让事情变得更糟。我从少量错误和警告增加到 25 个错误和 2,510 个警告。各种类型和方法都没有找到。这里显然有什么问题。
于是我又回去打猎了。我找到了有关添加服务引用和网络引用的说明(即 VS2008 中需要的额外步骤),我想我又回到了正确的轨道上。
我删除了(实际上,现在只是排除了)我之前尝试过的所有程序集;我添加了一个服务参考 https://my.exchange-server.com/ews/services.wsdl
现在我只剩下 1 个错误和 1 个警告。
警告:
元素“transport”不能包含子元素“extendedProtectionPolicy”,因为父元素的内容模型为空。
这是指当我添加服务引用时对 web.config 所做的更改;我刚刚发现 对此的修复. 。我已经按照指示对该部分进行了评论,它确实使警告消失了,所以为此欢呼。
不过,这个错误并不那么容易解决:
错误:
找不到类型或命名空间名称“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 使用文档?
解决方案
我建议转向托管 EWS API。它比尝试自己将所有东西拼凑起来更容易使用。它支持 Exchange 2007 SP1 和 Exchange 2010。我认为您会发现它更容易使用,并且可能会消除您的问题。
版本1:这里是 从微软下载.
这是 MSDN 文档.
对于版本 2(感谢@ruffin!)
由提问者添加:
事实证明有用的其他链接:
- 设置服务 URL(手动或通过自动发现)
- 使用 EWS 托管 API - 有关常见任务的一些基本文档
- 下载 EWS 托管 API 安装程序 - 与上面相同的下载;还包括一些 Visual Studio 的文档和智能感知数据。