我对WCF会话和日志文件有一个问题。WCF托管在Windows中,并为来自ASP.NET web应用程序的请求提供服务。每个用户连接都有自己的会话“在内存中”,并且有一个会话id。每个会话初始化一个新的日志类,并为每个用户在不同的文件夹中写入日志。发生的情况是,文件在一段时间后保持增长和日期时间更新,但这些行不在文件中。我怀疑文件系统或框架的缓冲并不能写入所有的行,所以我用CreateFile Win32 API和NO_BUFFERING选项进行了更改。
SafeFileHandle hcFile = Win32API.CreateFile(@"C:\Temp\File.log", System.IO.FileAccess.Write,
System.IO.FileShare.Read, IntPtr.Zero,
System.IO.FileMode.Append,
(System.IO.FileAttributes)Win32API.FILE_FLAG_NO_BUFFERING, IntPtr.Zero);
if (!hcFile.IsInvalid) {
FileStream fs = new FileStream(hcFile, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Log row log row log row");
sw.WriteLine("Log row log row log row");
sw.WriteLine("Log row log row log row");
} 但手柄总是无效的?你有什么想法吗?
谢谢
发布于 2018-03-26 15:23:07
你为什么要使用win32?您可以同样轻松地使用File对象。
var logFile = System.IO.File.Open(filePath, System.IO.FileMode.Append);或者因为你有你所有的文本行,就把它放进一个数组里,然后一次写完。
System.IO.File.WriteAllLines(filePath,new string[] { "Line 1", "Line 2" , "Line 3"});一个音符..。如果您是通过WCF web服务编写的,请记住web服务正在运行的帐户将需要对目录的写权限。
https://stackoverflow.com/questions/49494785
复制相似问题