WCF服务将失去日志



我在WCF会话和日志文件上有问题。WCF托管在Windows服务中,并从ASP.NET Web应用程序提供请求。每个用户连接都有自己的"内存"会话,并且具有会话ID。每个会话初始化一个新的日志类,并在每个用户的不同文件夹中编写日志。碰巧的是,在一段时间后,文件可以更新增长和日期时间,但这些行不存在文件中。我怀疑文件系统或框架的缓冲没有写所有行,因此我更改为使用no_buffering选项的Createfile Win32 API。

SafeFileHandle hcFile = Win32API.CreateFile(@"C:TempFile.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");
        } 

但是手柄始终无效?你有任何想法吗?

谢谢

为什么要使用win32?您可以轻松地使用文件对象。

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服务正在运行的帐户将需要将权限写入目录。

最新更新