ASP.NET 应用程序中的文件锁定(读/写)

2024-01-01

我有两个 ASP.NET Web 应用程序。一个负责处理一些信息并写入日志文件,另一个应用程序负责读取日志文件并根据用户请求显示信息。

这是我为作家编写的代码

public static void WriteLog(String PathToLogFile, String Message)
{
    Mutex FileLock = new Mutex(false, "LogFileMutex");
    try
    {
        FileLock.WaitOne();
        using (StreamWriter sw = File.AppendText(FilePath))
        {
            sw.WriteLine(Message);
            sw.Close();
        }    
    }
    catch (Exception ex)
    {
        LogUtil.WriteToSystemLog(ex);
    }
    finally
    {
        FileLock.ReleaseMutex();
    }
}

这是我的读者代码:

private String ReadLog(String PathToLogFile)
{
    FileStream fs = new FileStream(
          PathToLogFile, FileMode.Open, 
          FileAccess.Read, FileShare.ReadWrite);
    StreamReader Reader = new StreamReader(fs);
    return Reader.ReadToEnd();
}

我的问题是,上面的代码足以防止网络花园环境中的锁定吗?

EDIT 1 :脏读没关系。EDIT 2 :使用 new Mutex(false, "LogFileMutex") 创建互斥体,关闭 StreamWriter


听起来你想实现一个基本队列。为什么不使用可以保证可用性的队列呢?您可以将消息放入 MSMQ,然后实现一个 Windows 服务,该服务将从队列中读取消息并将消息推送到数据库。如果写入数据库失败,您只需将消息留在队列上(尽管您需要处理位置消息,因此如果失败导致数据损坏,您不会陷入无限循环)

这将消除所有锁定问题,并保证您将内容交付给读者......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET 应用程序中的文件锁定(读/写) 的相关文章

随机推荐

  • 如何从 bash 脚本在 GitHub 操作上创建输出?

    我有一个 GitHub 操作 本质上是一个 bash 脚本 我的操作的 javascript 部分执行 bash 脚本 const core require actions core const exec require actions e
  • 在模型上重复纹理

    我正在创建一个小游戏 你在迷宫中 迷宫的组织方式是2D Array 描述x and z position和block type 原来如此Tile based 假设每个块都是1 m 现在我的角色是2m高 迷宫应该是4m高的 因此 如果该瓷砖上
  • SQL查询多个AND和OR不起作用

    我有一个单元格 其中包含由双管分隔的值 我正在尝试使用以下内容搜索此单元格的内容 其中 10 是要搜索的数字 10 10 10 和 10 我的查询似乎只返回 10 没有其他变化 有人可以告诉我为什么它不起作用吗 提前谢谢了 您在下面看到的
  • 为什么从 python/uwsgi 内部调用时 `node.js` 会死掉?

    从外壳这个python启动并与之通信的代码node js过程工作正常 gt from subprocess import gt js function m console log m hello world gt out err Popen
  • 更改java的.class文件而不重新编译

    有什么办法可以做到以下几点 所以我有一个project jar 文件 在其中我需要修改传递给classA class 的某些方法的字符串 例如 假设这个 classA class 有一个名为 change String a String b
  • 检查 Postgres 复合字段是否为 null/空

    With Postgres 复合类型 http www postgresql org docs 9 2 static rowtypes html您基本上可以构建一个字段 其结构被定义为另一个表 我有一个名为 recipient 的复合字段
  • 错误:Angular 解析期间出现 Http 失败

    我正在学习 Angular 我想在 HTML 页面上显示 JSON 数据 错误是 Angular 解析期间 Http 失败 我不知道为什么请告诉我我的错误并给我链接如何显示多种类型的 JSON 数据 person component htm
  • MSBuild - 设置解决方案的属性

    我们在 VS2008 中使用 NET 3 5 我有一个包含约 20 个项目的解决方案 随着应用程序的增长和添加新模块 这个数字会随着时间的推移而增长 今天我需要为每个项目设置一个属性 我必须编辑每个 csproj 文件以添加以下内容
  • 如何避免在 Visual Studio 2017 中加载 Microsoft.VisualStudio.Threading 时出现错误

    我已在仅针对 Visual Studio 2019 的版本中对 Visual Studio 包进行了更新日志 我开始使用 NuGet 包的一项更改微软VisualStudio SDK 版本 16 0 202 并删除了许多对 DLL 的单独引
  • "aaaa".StartsWith("aaa") 返回 false

    如果这不是一个错误 那么任何人都可以解释这种行为背后的原因吗 事实上 似乎每个奇数个字母都会返回 false string test aaaaaaaaaaaaaaaaaaaa Console WriteLine test StartsWit
  • php oop文件上传

    我正在研究 oop php 文件上传脚本 很简单 但不起作用 问题是什么 我学习如何使用 FILE 以及如何编写 oop 风格的代码 Thanks upload php 是
  • Promise - 是否可以强制取消 Promise

    我使用 ES6 Promises 来管理所有网络数据检索 在某些情况下我需要强制取消它们 基本上 场景是这样的 我在 UI 上进行预先输入搜索 其中请求委托给后端必须根据部分输入执行搜索 虽然此网络请求 1 可能需要一点时间 但用户继续键入
  • SQL 在 Select 语句中合并两列

    如果我的数据库中有一个列是 Address1 和 Address2 我如何组合这些列 以便我只能在 select 语句中对其执行操作 我仍然会将它们单独保留在数据库中 我希望能够做到这一点 WHERE completeaddress LIK
  • Dos 内联 IF 测试错误级别,不使用延迟扩展

    无论如何 是否可以在不延迟扩展的情况下执行以下操作 一行 为了可读性而中断 comspec v on c windir System32 reg exe import c temp test reg if errorlevel neq 0
  • 为什么SELECT标签的下拉框显示在错误的位置?

    My CSS file doesn t touch the tag select at all also no CSS classes are related to the tag select But when showing in br
  • C# 相当于 VB6 字符占位符

    C 是否有相当于 VB6 格式函数中使用的 符号 VB6 字符占位符 显示一个字符或一个空格 如果该字符串在格式字符串中出现 的位置有字符 则显示它 否则 在该位置显示一个空格 占位符从右到左填充 除非有 格式字符串中的字符 我猜你的意思是
  • 抛出异常:WebDriver.dll 中的“OpenQA.Selenium.WebDriverException”

    我是使用 C 的 Selenium 新手 每当我尝试运行简单的代码时 我都会得到 Exception thrown OpenQA Selenium WebDriverException in WebDriver dll 每次 注意 我使用的
  • 如何在Python中跳出双while循环?

    新手蟒蛇在这里 如果用户选择 Q 作为 退出 我如何才能跳出第二个 while 循环 如果我按 m 它会进入主菜单 在那里我可以停止按 Q 键 while loop 1 choice main menu if choice 1 os sys
  • utf-8字符编码问题

    我通过使用美丽的汤库从网页获得链接a get href 链接中有一个奇怪的字符 但当我得到它时 它变成了 我怎样才能正确地对其进行编码 我已经在页面开头添加了 coding utf 8 r requests get url soup Bea
  • ASP.NET 应用程序中的文件锁定(读/写)

    我有两个 ASP NET Web 应用程序 一个负责处理一些信息并写入日志文件 另一个应用程序负责读取日志文件并根据用户请求显示信息 这是我为作家编写的代码 public static void WriteLog String PathTo