快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

服务器端改XML冲突的解决方式讨论

XML文件不同access,那个access数据库似乎有防止更改冲突的机制,但是我们“微小”的微软XMLDom没有给我们预备这个防止冲突!



详细例子:
两人同时调用写入XML文件的asp,结果只有一个人能写进去,另外一个却没有。
这跟XMLDom的工作方式有关。
用XMLDom.load(Path)载入文件之后,文本对象被载入内存,只读属性解除。当两个人同时载入一个XML文件时,XMLDom的内容是相同的。这样问题来了。
例如:
tmp1.XML
<Root></Root>


A君在XMLDom根中插入一个子标签<Chd1>Chd1</Chd1>,B君在XMLDom中又插入一个子标签<Chd2>Chd2</Chd2>。然后两个人保存,现在我们来看两人的XMLDom对象都是什么东西


A:
<Root>
<Chd1>Chd1</Chd1>
</Root>


B:
<Root>
<Chd2>Chd2</Chd2>
</Root>


OK,谁处理的慢,谁就被写进tmp1.XML文件啦。
但是我们想得到的是,两个人增加的东西都写入到XML文件,就是tmp1.XML的结果应该是这样的。


tmp1.XML
<Root>
<Chd1>Chd1</Chd1>
<Chd2>Chd2</Chd2>
</Root>


如何解决这个问题呢?


初步构想:
方式1:利用Application.Lock的特性:在载入XML文件之前,建立一个Application,并且Lock起来,在写入完成之后再Unload。那么,同时执行的asp就会停在Application.Lock那里,等Application重新开放再执行下来,从而达到XML异步写入的目的。详细例子:
tmp1.asp
以下内容为程序代码:
<%
application("XMLFiles1"),Lock
XMLDom.loat(path)
处理过程
XMLDom.save(path)
application("XMLFiles1").unlock
%>

这个好是好,但是有个缺点,假如有10个xml文件就要建立10个application,有10000个就要建立10000个application,天。


方式2:还是利用application,不过这次不同以前:这次只用到一个application,把各个操作哀求编号起来,建立一个队列,再把操作哀求的编号返回诶客户端。服务器每执行完一个操作就删一个编号,那么队列就一点一点的向前了。客户端根据自己的队列编号,定期刷新一下,要求服务器执行自己的操作。这个代码太复杂了,基本是这样的流程


服务器建立Application -> tmp2.asp用来添加操作编号 -> 返回当前操作的编号给客户端 -> 客户端定期刷新并提交自己的操作编号给tmp3.asp -> tmp3.asp用来做操作XML -> tmp3.asp判定是否轮到该编号,轮到就做,未轮到返回错误信息 -> tmp3.asp做了之后队列前移,删除操作编号


这个方式仅仅占用一个Application(可以对编号进行规则编制,例如[tmp1.XML|1|2|3}[tmp2.XML|1|2|3],其中第一个是xml文件名,后面那些是操作编号,|是间隔符,[]是分割每个文件的标识),但是客户端刷新时间不好定,太小了就占服务器资源太多,太久了队列移动就十分缓慢。


方式3:为每个操作建立一个暂时的xml文件,由服务器在一定时间内归总一次:这个方式对于对时间性需求不大的还可以,可是,对于时间性要求异常高的就不行了。例如论坛。(其实时间性要求不大的话完全不必要顾虑冲突这个问题)
返回类别: 教程
上一教程: 用ASP+SQL SERVER为网页建一道防火墙
下一教程: 网页计数器的程序

您可以阅读与"服务器端改XML冲突的解决方式讨论"相关的教程:
· 英文的服务器不支持中文及中文数据库的解决办法
· 使用XMLDOM在服务器端生成静态HTML页面
· IIS6.0服务器架站无法访问解决方案总结
· 用XML+FSO+JS实现服务器端文件的选择
· ASP通过XMLDOM在服务器端操作XML文件的主要方式和实现
    微笑服务 优质保证 索取样品