【问题标题】:Error Generating log file to server network path将日志文件生成到服务器网络路径时出错
【发布时间】:2020-05-14 05:46:05
【问题描述】:

当我在调试模式下运行它时,我可以成功地将日志文件写入服务器路径,但是如果我将其发布到本地 iis,我不知道为什么我会在 Web 控制台上收到 500 内部服务器错误。

这是我的后端代码:

 public static void VerifyDir(string path)
        {
            try
            {
                DirectoryInfo dir = new DirectoryInfo(path);
                if (!dir.Exists)
                {
                    dir.Create();
                }
            }
            catch { }
        }
        public IActionResult storeLogs(string execTime)
        {
            string query = "Test Query statement"
            string path = "//serverPath/Test/Log/";


            VerifyDir(path);
            string fileName = "Track" + "_Logs.txt";

            System.IO.StreamWriter file = new System.IO.StreamWriter(path + fileName, true);
            file.WriteLine(DateTime.Now.ToString() + ": \n" + query + "\n" + execTime + "\n") ;
            file.Close();

            return Ok("ok");
        }

这是来自 UI 的 ajax 调用:

$.post("/Home/storeLogs", { execTime: 'test123'})                    
    .done(function () {                                                                                  
        console.log("success writing the log");
    });

调试模式和发布模式的访问权限有区别吗?任何建议/cmets TIA。

【问题讨论】:

  • 当你调试它时,它会在哪一行中断?
  • 可能是权限问题。您可以尝试将IIS_USER 的读/写权限添加到//serverPath/Test/Log/ 文件夹。调试模式使用的是内置用户,但 IIS 使用的是 IIS_USER。

标签: c# asp.net-mvc iis


【解决方案1】:

我认为这只是因为 IIS 应用程序池标识没有访问//serverPath 的权限。 当您在 Visual Studio 中调试它时,应用程序在 IIS express 中运行,其身份是您当前的系统登录用户。可能是域用户。

但是,当您将其发布到本地 IIS 时。您的应用程序池将尝试通过应用程序池身份访问 //serverPath。默认情况下,应用程序池无权访问您的服务器路径并且连接被隔离。

所以请尝试将应用程序池身份替换为有权访问您的 //serverpath 的域帐户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2018-11-04
    • 2017-07-16
    • 2019-09-08
    相关资源
    最近更新 更多