首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wcf服务丢失日志。

wcf服务丢失日志。
EN

Stack Overflow用户
提问于 2018-03-26 15:09:27
回答 1查看 65关注 0票数 0

我对WCF会话和日志文件有一个问题。WCF托管在Windows中,并为来自ASP.NET web应用程序的请求提供服务。每个用户连接都有自己的会话“在内存中”,并且有一个会话id。每个会话初始化一个新的日志类,并为每个用户在不同的文件夹中写入日志。发生的情况是,文件在一段时间后保持增长和日期时间更新,但这些行不在文件中。我怀疑文件系统或框架的缓冲并不能写入所有的行,所以我用CreateFile Win32 API和NO_BUFFERING选项进行了更改。

代码语言:javascript
复制
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");
        } 

但手柄总是无效的?你有什么想法吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-26 15:23:07

你为什么要使用win32?您可以同样轻松地使用File对象。

代码语言:javascript
复制
var logFile = System.IO.File.Open(filePath, System.IO.FileMode.Append);

或者因为你有你所有的文本行,就把它放进一个数组里,然后一次写完。

代码语言:javascript
复制
System.IO.File.WriteAllLines(filePath,new string[] { "Line 1", "Line 2" , "Line 3"});

一个音符..。如果您是通过WCF web服务编写的,请记住web服务正在运行的帐户将需要对目录的写权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49494785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档