【发布时间】:2014-05-27 07:54:27
【问题描述】:
之前运行良好的 Windows 服务(即 Email_Tool)最近无法正常运行。
服务概览
- Email_Tool 是一个 Windows 服务,它使用 FileWatchers 轮询目录。
- 它会持续监视目录,并在收到某些文件后向用户发送电子邮件。
- 它所监视的路径是一个共享路径,对不同的用户有不同的权限。我的服务使用具有读取权限的服务帐号。
- 文件的接收和电子邮件的发送被记录到一个文件中(即 ServiceLog.txt)。
- 一个解释工作流的例子: 在上述位置创建名称为 21052014 的文件夹(创建名称为当前日期的文件夹)。在该文件夹中,到达的文件很少(Date.txt、InputsLog_20140520.txt、PTool_Start_20-05-2014.txt、PTool_End_20-05-2014.txt)。因此,该服务会发送一封邮件,将每个步骤记录在日志文件中以进行支持操作。
面临的问题
Email_Tool 几天以来一直没有按预期工作。这些步骤没有被记录在日志文件中,电子邮件也没有被发送出去。
采取的步骤
我们已采取许多步骤来确定问题。以下是其中的几个:
- 为了证明代码可以运行,我们使用lower环境的本地文件路径(F盘)作为文件路径。服务运行良好,邮件已发送。
- 我们尝试使用较低环境中的共享路径作为路径。服务运行良好,邮件已发送。
- 我们尝试使用其他较低环境的生产环境中使用的共享路径,我们在其中创建了新文件夹并赋予了它们适当的权限。这没有成功。
很明显,之前运行的服务不适用于生产中使用的共享路径。
值得注意的信息
- 当我们STOP然后START服务,并尝试通过创建文件夹和移动文件来查看工作流程(如上面的服务概述中所述),服务工作了几个步骤,然后就失控了。我可以确认这一点,因为有时(并非总是)可以在日志文件中看到创建文件夹的步骤。我无法理解为什么这在几个步骤中有效,然后停止工作,因为它在其他文件服务器上运行良好。
- 就在服务失控的前一天,共享路径被移动到不同的硬件软件。我们几乎可以肯定问题是由这个引起的。但维护此共享路径的团队已确认在硬件迁移后权限保持不变。
- 我尝试通过将代码移动到表单应用程序中来调试代码,并得出以下数字/代码:
基本异常
基础异常区给出以下代码:
错误代码:-2147467259 本机错误代码:58
以上原生错误码58指向如下(google搜索)
ERROR_BAD_NET_RESP 58 (0x3A) 指定的服务器无法执行请求的操作。
内部异常
内部异常显示如下代码:
_COMPlusExceptionCode -532459699 int
代码
服务启动事件有这个代码sn-p
m_Watcher = new System.IO.FileSystemWatcher();
m_Watcher.Filter = "*.*";
m_Watcher.Path = @filWatcherPath;
m_Watcher.IncludeSubdirectories = true;
m_Watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
m_Watcher.Created += new FileSystemEventHandler(OnChanged);
// m_Watcher.Error += new ErrorEventHandler(OnError);
m_Watcher.EnableRaisingEvents = true;
作为一种解决方法,我们临时使用了另一个文件服务器,该服务在该服务器上运行良好。但我们必须找到解决办法。如果我必须提供任何其他信息,请告诉我。我之前发布过这个问题,但我认为这篇文章提供了更多细节。
【问题讨论】:
-
文件服务器上的 Windows 更新?
-
整个文件服务器被移到了新的硬件上。
标签: c# .net service windows-services filesystems