将Microsoft EWS StreamingNotification示例转换为服务

本文关键字:转换 服务 Microsoft EWS StreamingNotification | 更新日期: 2023-09-27 17:50:30

我一直在努力尝试将微软的EWS流媒体通知示例转换为服务(MS源码http://www.microsoft.com/en-us/download/details.aspx?id=27154).

我将其作为控制台应用程序进行测试。然后我使用通用服务模板并使其能够编译,安装和启动。它在大约10秒后停止,到处都是"本地计算机上的服务启动然后停止"。

所以我回去升级到c# 2013 express,并使用NLog来放置一堆日志跟踪命令,以便我可以看到它退出时的位置。

我能找到它的最后一个地方是在示例代码中,SynchronizationChanges函数,

public static void SynchronizeChanges(FolderId folderId)
{
   logger.Trace("Entering SynchronizeChanges");
   bool moreChangesAvailable;
   do
   {
      logger.Trace("Synchronizing changes...");
      //Console.WriteLine("Synchronizing changes...");
      // Get all changes since the last call. The synchronization cookie is stored in the
      // _SynchronizationState field.
      // Only the the ids are requested. Additional properties should be fetched via GetItem 
      //calls. 
      logger.Trace("Getting changes into var changes.");
      var changes = _ExchangeService.SyncFolderItems(folderId, PropertySet.IdOnly, null, 512,
                                                      SyncFolderItemsScope.NormalItems, 
                                                      _SynchronizationState);
      // Update the synchronization cookie
      logger.Trace("Updating _SynchronizationState");

日志文件显示跟踪消息"Getting changes into var changes."但不显示"Updating _SynchronizationState"消息。

所以它永远不会超过var changes = _ExchangeService。SyncFolderItems

我一辈子都弄不明白为什么它只是退出。有很多EWS流通知的例子。我有3个编译和运行很好,但据我所知,没有人张贴了一个例子,它做了一个服务。

将Microsoft EWS StreamingNotification示例转换为服务

如果你没有看到"Updating…"消息,很可能是同步抛出了异常。在try/catch语句中封装。

好的,现在我看到了错误,这看起来像您的普通权限问题。当您将其作为控制台应用程序运行时,您可能会向Exchange提供默认凭据,这是您的登录ID。对于Windows服务,如果您使用其中一个内置帐户(例如本地系统)运行该服务,则您的默认凭据将无法访问Exchange。

要纠正,要么(1)在您使用控制台应用程序的帐户下运行服务,要么(2)将这些凭据添加到Exchange service对象。