【问题标题】:Use FileSystemWatcher in ASP.net在 ASP.net 中使用 FileSystemWatcher
【发布时间】:2014-05-04 18:04:57
【问题描述】:

我为控制台应用程序创建了文件系统观察程序。它运行完美。

除非您按“q”,否则它会继续列出用于添加文件的文件夹并在找到时显示文件的名称。

public void FileWatcher()
        {
            while (true)
            {

                FileSystemWatcher watcher = new FileSystemWatcher();
                watcher.Path = @"C:\\WATCH-FOLDER";
                watcher.IncludeSubdirectories = true;

                watcher.NotifyFilter = NotifyFilters.Attributes |
                NotifyFilters.CreationTime |
                NotifyFilters.DirectoryName |
                NotifyFilters.FileName |
                NotifyFilters.LastAccess |
                NotifyFilters.LastWrite |
                NotifyFilters.Security |
                NotifyFilters.Size;

                watcher.Filter = "*.*";

                watcher.Changed += new FileSystemEventHandler(OnChanged);
                watcher.Created += new FileSystemEventHandler(OnChanged);

                watcher.EnableRaisingEvents = true;
            }

        }

        public void OnChanged(object source, FileSystemEventArgs e)
        {
            Console.WriteLine("{0}, with path {1} has been {2}", e.Name, e.FullPath, e.ChangeType);
        }

        public void OnRenamed(object source, RenamedEventArgs e)
        {

            Console.WriteLine(" {0} renamed to {1}", e.OldFullPath, e.FullPath);
        }

但是现在我如何在我的 Web 应用程序中使用它。我想要什么,当文件添加到它选择的文件夹中并在数据库中插入信息时。所以当我按下全部显示时,这些信息将成为表中现有数据的一部分。

但我不知道在哪里放置函数。有人说放在 Global.asax 文件中,也有人说放在主页面,或者添加线程。我完全糊涂了,不知道该怎么做。

【问题讨论】:

  • 这通常不是一个好主意,因为您没有与客户端进行实时通信。
  • 还有一件事。您应该记住,应用程序池仅在有客户端时运行。如果 20 分钟内没有人访问您的 Web 应用程序,则 IIS 将停止应用程序池,并且您的 FileWatcher 也将停止
  • 您需要开发一个独立于 IIS 运行并监控文件夹的进程 - 就像您已经开发的那个一样。监视器在 Web 应用程序中没有位置,如上所述,它仅在客户端主动访问时运行。
  • 我和@Aheho,问了很多问题,我们期待它方面的澄清!
  • @Admin,我们在给予 -ve 标记时是否有任何规则和规定。我在过去两周开始学习 ASP.NET,我想问这个重要的问题。这个问题显示了我在短短两周内所做的努力和研究。但是我还是得到了某人的负面评价,为什么,我真的无话可说。我们是否有任何标准,管理员可以给那些态度粗心的初学者给 -ve 标记的人给予 -ve 标记,并试图让他们因提出重要问题而士气低落。

标签: c# asp.net web filesystemwatcher


【解决方案1】:

为什么不在 global.asap 的 app_start 中托管这个文件观察器,所以即使 iis 在 20 分钟不活动后关闭您的应用程序,它也会在用户再次点击您的应用程序时重新启动一个新的观察器。

这是一个有效的解决方案,对于那些不拥有服务器的人来说,这可能是唯一的解决方案,即。 e.谁在共享主机上托管他们的网站并且无法访问 Windows 服务

【讨论】:

  • 如果在 asp.net 应用程序关闭期间文件到达怎么办?
  • 为什么用户会在网站关闭时将文件上传到您的网站?我假设这里的开发人员正在尝试监视他的网站(网络应用程序)的活动,而不是监视整个服务器活动!问题是他拥有服务器并且可以访问其所有实用程序和服务,或者他只有共享网络托管。用户只能访问他的网络应用程序!!!
  • 如果文件是通过 asp.net 应用程序发布的,那么为什么要使用文件监视程序呢?只需将处理代码放在接受文件发布的同一代码中即可。
  • 现在您提出了一个绝妙的解决方案:),现在轮到问题发起者澄清他的网络应用程序设置并澄清监视文件夹内容的原因以及该文件夹如何更新! !我想你同意我的观点,这个问题有点含糊,对吧?
  • 我同意。很高兴知道用例。
【解决方案2】:

这个进程应该放在一个windows服务应用程序中。您不应尝试在 asp.net 应用程序中托管它。

如果您使用的是 Visual Studio,那么您就有能力制作 Windows 服务。文件 -> 新建 - 项目 -> C# -> 窗口服务。您在测试控制台应用程序中的代码将进入从 ServiceBase 派生的类的 OnStart 事件中。

【讨论】:

  • 伙计们,我不知道什么是 Windows 服务应用程序。任何想法,任何例子。我对 ASP Web 的东西完全空白
  • 这不是 ASP.Net 的东西。这是通常在后台运行的 Windows 服务 - en.wikipedia.org/wiki/Windows_service 。您可以编写自己的,将在 Windows 执行时执行
【解决方案3】:

可能有点晚了,但从建筑伦理的角度抛开对与错,这解决了问题......

斯科特·汉塞尔曼曾这样说:

http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx

...他提出了自己的想法,也提到了这个...

http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/

...文章谈到使用这个...

https://msdn.microsoft.com/en-us/library/system.web.hosting.hostingenvironment.registerobject.aspx

...基本上在 IIs 工作进程中嵌入了类似于任务管理器/Windows 进程的东西,这允许我们在应用程序中执行类似的操作...

using System;
using System.Threading;
using WebBackgrounder;

[assembly: WebActivator.PreApplicationStartMethod(
  typeof(SampleAspNetTimer), "Start")]

public static class SampleAspNetTimer
{
    private static readonly Timer _timer = new Timer(OnTimerElapsed);
    private static readonly JobHost _jobHost = new JobHost();

    public static void Start()
    {
        _timer.Change(TimeSpan.Zero, TimeSpan.FromMilliseconds(1000));
    }

    private static void OnTimerElapsed(object sender)
    {
        _jobHost.DoWork(() => { /* What is it that you do around here */ });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多