多个用户同时读取密钥时的 web.config 问题

Posted

技术标签:

【中文标题】多个用户同时读取密钥时的 web.config 问题【英文标题】:web.config issue when multiple user reads the key at the same time 【发布时间】:2021-12-24 00:37:15 【问题描述】:

当多个用户同时读取密钥时,我收到此错误, 加载配置文件时出错:

进程无法访问文件文件“web.config”,因为它正在 被另一个进程使用

我在代码中使用如下代码。

var value = ConfigurationManager.GetSection("keyname") as NameValueCollection;

【问题讨论】:

配置配置 = ConfigurationManager.OpenExeConfiguration(string.Empty);调试了解后,此行导致问题 【参考方案1】:

如果您从 web.config 并发读取,我建议您使用 ReadWriterLock 类。

在你的课堂上使用:

  static ReaderWriterLock rwl = new ReaderWriterLock();
  ....
  rwl.AcquireReaderLock();
  try 
        // It is safe for this thread to read from the shared resource.
        var value = ConfigurationManager.GetSection("keyname") as NameValueCollection;
     
     finally 
        // Ensure that the lock is released.
        rwl.ReleaseReaderLock();
     

文档https://docs.microsoft.com/en-us/dotnet/api/system.threading.readerwriterlock?view=net-5.0

【讨论】:

请阅读此内容***.com/questions/745384/… 谢谢 从链接中,静态方法是线程安全的,而实例方法不是。由于GetSection 是静态的,它是安全的,并且由于从它返回的对象被分配给一个局部变量,它似乎并没有跨线程共享。似乎更有可能的是该文件是in use by some other process,或Visual Studio。 配置配置 = ConfigurationManager.OpenExeConfiguration(string.Empty);此行导致问题

以上是关于多个用户同时读取密钥时的 web.config 问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 dotnet publish 发布多个 web.config

这是允许多个用户同时访问数据库的好方法吗?

使用 web.config 转换时的可替换令牌_?

如何使用 ASP.NET 在 web.config 文件中写入 appSetting?

asp.net web.config中基于多个角色的文件夹授权

编译时的项目(bin)文件夹路径?