场景如下:
服务有一个对应的config文件,服务经常写数据,客户电脑经常断电,导致config文件内容损坏。我在虚拟机中做了如下尝试,新装一个win8系统,安装客户端,断电三四次复线了问题,手动启动服务,发现服务确实启动不了。另外一台win8虚拟机,拷贝损坏虚拟机中的config文件到该客户端路径下。手动启动服务,发现服务可以启动。不知道各位有谁遇到过这个问题,主要是想知道为什么两种不同情况会出现不同的情况,一个可以启动,一个不可以启动。
事件查看器中,看到损坏的设备事件如下:
神奇,坐等大神来答疑。
--------
猜测是不是文件有不可见字符?可以用类似Notepad++等编辑器看看。
不是,是文件完全被清空了,留下空字符,或者文件内容不完整了,xml解析异常等情况。其他的暂时未知。
哎…… 你不应该将 存到 配置文件里。
解决方案很简单,你存到数据库里面就可以了。数据库有“事务” 遇到 断电,断网 各种突发状况的时候都能 保证数据 不会出错。
这样子你的系统就可以正常运行了。
这个是以前遗留下来的问题,因为已经上线的项目,就没有考虑做整改,而且昨天测试的时候发现,config文件中,即使不保存数据,只保存了兼容2.0以上版本的信息,Win8系统突然断电,也是会导致config文件损坏的,后续是肯定要转数据库去的,不过只是想了解下这个机制。
不能手动编辑一下这个文件试试么?
文件肯定是损坏的了,文件完全被清空了,留下空字符,或者文件内容不完整了,xml解析异常,主要是想了解这个机制。
没看太懂。。你的服务就是一个客户端吗、、
你可以像word那样复制一个临时文件。。或者在内存里写,定期写到磁盘里,这样没保存好的内容可能会丢失,但是至少不至于破坏原来的数据
@smtctc: 是客户端,这个确实是内容完全清空了,所以我才想了解下这个机制。
问题太多
1、服务器整天断电,这环境也够差的。
2、Windows Service 没事别整天往文件写东西,这样碰到断电的机会就少了。
3、服务器居然用WIN8? 这是啥节奏。
4、首先你得自己弄明白是文件损坏造成的问题还是不同系统软件表现不一致,这个别人看不到,没法帮你调试的。
是客户端,这里是我没有说清楚。用户的环境很复杂,没办法让用户怎么怎么做。
@廉价拉菲:
1、不用CONFIG又不会死,替代方法几百种
2、客户环境太差,造成对软件的高可用性要求高,但也不能无限制,
整天断电的话,WINDOWS都可能会坏掉的。
3、感觉你这已经不是软件问题了,应该考虑外在的解决方案。
@爱编程的大叔: 其他的方案都已经确定了,我发帖子主要是想了解机制。用config是遗留问题,在不出问题的情况,上线项目,是不考虑完全替换的。
@廉价拉菲: 所以你要问的是?
这个不能那个不能的,看起来只能找个仁波切开光了。
或者找个道士抓鬼。
@爱编程的大叔: 我也遇到断电丢失 Config 内容的问题了,不是没保存,而是内容空白。
关闭磁盘的写入缓存试下。
这个已经试过了,关掉也是会出现这个问题的。