将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个编译和运行很好,但据我所知,没有人张贴了一个例子,它做了一个服务。
如果你没有看到"Updating…"消息,很可能是同步抛出了异常。在try/catch语句中封装。
好的,现在我看到了错误,这看起来像您的普通权限问题。当您将其作为控制台应用程序运行时,您可能会向Exchange提供默认凭据,这是您的登录ID。对于Windows服务,如果您使用其中一个内置帐户(例如本地系统)运行该服务,则您的默认凭据将无法访问Exchange。
要纠正,要么(1)在您使用控制台应用程序的帐户下运行服务,要么(2)将这些凭据添加到Exchange service对象。