65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 WCF 进行 Exchange 2007 推送通知

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.78/5 (6投票s)

2007年11月3日

Ms-PL

3分钟阅读

viewsIcon

87296

downloadIcon

1495

使用 WCF 消费 Exchange 2007 推送通知。

引言

Exchange 2007 通过使用 Web 服务引入了一个新的编程模型。该 API 被称为 Exchange Web Services (EWS)。这个新的编程模型易于使用,在 SDK 中有很好的文档,并且学习曲线也很平缓。

Notifications

通知是指当 Exchange 中特定资源的特定活动发生时引发的事件。最明显的情况是,当您想要监视特定的邮箱时。Exchange 有两种通知方法:被动通知和主动通知。

  1. 拉取通知(被动方法):您构建应用程序,使其每隔一段时间向 Exchange 查询有关所需资源发生的任何事件。
  2. 推送通知(主动方法):Exchange 会通知您发生的更改,并通过自定义 Web 服务(您构建的 Web 服务)将通知发送到您的应用程序。

无论是拉取通知还是推送通知,都需要您订阅所需的事件,以便 Exchange 可以生成所需的通知,并将其发送到您的应用程序。

EWS 编程和类型

EWS 区分两种类型的资源文件夹和项目。项目可以是消息、联系人、任务等……所以,本示例中的通知监视的是收件箱文件夹。

针对 EWS 进行编程是通过请求和响应来完成的。

您创建(请求)。然后,使用 ExchangeBindingService,您发送请求并返回(响应),您可以测试其是否成功。

动机

SDK 中包含的推送通知示例包含一个订阅者项目和一个客户端 Web 服务项目,用于消费 Exchange 通知。

考虑到您可能没有安装 IIS,或者您必须构建一个 Web 服务才能在您的应用程序和 Exchange 通知之间建立桥梁,这让我感到不舒服。EWS 始终使用 SOAP 消息。因此,我认为使用 WCF 服务将是与通知交互的一个不错的特性。WCF 服务可以托管在任何应用程序中,并且它将与软件的其余部分集成。

注释

推送通知客户端具有 Interfaces.cs,它是从 SDK 中包含的 NotificationServices.wsdl 生成的。要重新生成相同的文件,您必须从服务器中的 Exchange 文件夹中借用 Messages.XSDTypes.XSD

Wsdl /si NotificationService.wsdl Messages.xsd Types.xsd

但是要生成 WCF 代码,您需要运行 svcutil

Svcutil NotificationServices.wsdl Messages.xsd Types.xsd

您的类将继承 schemas.microsoft.com.exchange.services.2006.messages.cs 中生成的类。

public class Notification : NotificationServicePortType

NotificationServicePortType 与示例中 Interfaces.cs 中的类不同,但不要惊慌;它是所需类型的一个包装器。一旦我们调整了 EndPoint 配置,WCF 将处理所有问题。

运行演示

您应该意识到您的 WCF 可能在另一台计算机上运行。

  • 您应该在 Windows 防火墙中为所选端口添加例外,或者禁用防火墙。
  • 如果 Exchange 和 WCF 服务位于不同的机器中,请参考计算机名称;否则使用 localhost
  • 确保 IIS 中存在 /EWS 文件夹,并且其网站正在运行,并确保它使用的端口。
  • 很多错误通常都与 URL 有关。

WCF 如何像 Web 服务一样工作

必须准确配置 EndPoint 配置,以使 WCF 像 Web 服务一样工作,并让 Exchange 正确调用 SendNotification 方法。

请参阅 App.config 文件中的这一部分

<endpoint address=""           
  contract="NotificationServicePortType" 
  binding="basicHttpBinding"
  bindingName="NotificationServiceBinding"
  bindingNamespace="http://schemas.microsoft.com/exchange/services/2006/messages"
/>

历史

  • 版本 1.0。
© . All rights reserved.