使用C#中的FileSystemWatcher时,HttpContext.Current为空

3

我在我的ASP.NET Web应用程序中使用了Forms身份验证,并在特定表单中使用FileSystemWatcher。

它有两个事件watcher_Changedwatcher_Created。这些事件被正确地调用。一旦事件被触发,HttpContext.Current将变为null。

我不明白是不是FileSystemWatcher清除了会话。有人可以帮助我吗?代码如下。

void watcher_Created(object sender, FileSystemEventArgs e)
{
    watcher_Event(sender, e);
}

private void watcher_Event(object sender, FileSystemEventArgs e)
{
    try
    {
        if (getUserName() != null)
        {
            //Some Code
        }
    }
}

public string getUserName()
{
    FormsIdentity useridentity = (FormsIdentity)HttpContext.Current.User.Identity;   //Exception is thrown here. ("Object reference not set to instance of an object")
    FormsAuthenticationTicket userticket = useridentity.Ticket;
    string username = userticket.Name;
    return username;
}

感谢您的选择。

你在哪里调用这段代码?有些情况下只有HttpContext User,而不是所有地方。 - JotaBe
或者你根本不应该使用FileSystemWatcher。请考虑其他方法。HttpContext是线程本地的,所以你不能期望它在每个线程中都不为空。 - Lex Li
@LexLi,你能否提供任何其他的方法?非常感谢。 - Vijay
你可以在最开始的时候发布更多关于这个表单功能以及为什么决定使用FileSystemWatcher的细节。这样每个人都可以帮助塑造它。请考虑将其作为一个新的设计问题发布,因为对于这个问题,你已经从@Douglas那里得到了正确的答案。 - Lex Li
@LexLi 非常感谢您的回复。表单的功能如下所示。
  1. 用户登录应用程序。
  2. 应用程序应持续扫描一个文件夹,以查找新增的文件(XML)。文件夹的路径从数据库中读取。
  3. 当文件夹中创建新文件时,应用程序从XML文件中读取相关数据,并在表单中显示有关该文件的信息。
在寻找实现此功能的相关控件时,我选择了FileSystemWatcher。但我不确定它在Web应用程序中的效果如何。
- Vijay
1个回答

1
< p > FileSystemWatcher.Changed 事件本质上是异步的。这意味着它可能会在 HTTP 请求已被服务并且会话已关闭之后被触发。如果您想将 FileSystemWatcher 的事件与导致其创建的用户关联起来,则需要显式地维护此关联 - 例如,通过一个字典,将每个 FileSystemWatcher 映射到用户名。


谢谢您的回复。您能否详细解释一下如何将FileSystemwatcher映射到用户名? - Vijay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接