我有一个像下面这样的函数将文件写入logfile:
private async Task<string> GetResponseString(string test)
{
var response = await client.PostAsync("https://something/api/apimethod"....);
ProcessWrite("C:\\"log.txt","some text to write").Wait();
}
static Task ProcessWrite(string filePath,string text)
{
return WriteTextAsync(filepath,text);
}
static async Task WriteTextAsync(string filePath,string text)
{
byte[] encodedText = Encoding.Unicode.GetBytes(text);
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Append, FileAccess.Write, FileShare.ReadWrite,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};
}
它用于编写文件,当我在Visual Studio中运行时,我能够编写该文件,但是当我在IIS Web服务器中部署它时。然后将内容写入文件停止工作。但没有例外。
如何在部署日志时写日志?
以下是我的计算机上的IIS应用程序池的标准快照,即我的IIS版本 - 10.0
由于它显示所有应用程序池默认具有与ApplicationPoolIdentity
关联的唯一匿名用户,现在您有两个选项:
设置相关应用程序池的权限,使用ICACLS
命令,更多细节here和here,下面是一个例子,有很多微调选项
ICACLS "C:" /grant "IIS AppPool\DefaultAppPool":F /t
或者您甚至可以将任何其他相关应用程序池的DefaultAppPool
or添加到具有权限或Windows资源管理器中的目录权限的任何相关组,它们将被自动识别并且将被许可用于关联的ApplicationPoolIdentity
在同一个快照中,有一个带有域帐户的应用程序池,可以从高级设置更改,如下面的快照:
在这里,您可以添加具有访问文件系统权限的用户,从安全角度来看,这是我更喜欢的
还请修理一下:
ProcessWrite("C:\\"log.txt","some text to write").Wait()
应该
await ProcessWrite("C:\\"log.txt","some text to write")
Task.Wait
可以阻止对ASP.Net的调用,导致死锁和使异步调用使用await <Method Name>
的理想方法