24

我的任务是在 .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();

    ...
}

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

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

我排除了 MEWS 组件,这只会让事情变得更糟。我从少数错误和警告变成了 25 个错误和 2,510 个警告。各种类型和方法都没有找到。明显有问题,这里。

于是我又回去打猎了。我找到了关于添加服务引用和网络引用的说明(即它在 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?是否有其他位置可以记录与 EWS 一起使用的文档比 MSDN 更好?

4

1 回答 1

38

我建议迁移到托管 EWS API。它比尝试自己拼凑所有东西更容易使用。它同时支持 Exchange 2007 SP1 和 Exchange 2010。我认为您会发现它更易于使用,并且可能会消除您的问题。

版本 1:这是从 Microsoft 下载的

这里是MSDN 文档

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

下载- MSDN 文档


由提问者添加:

证明有帮助的其他链接:

于 2010-03-24T03:57:16.923 回答