日期:2014-05-16  浏览次数:20320 次

身份证读卡器多个系统使用的问题
有2个WEB站点,均使用同一型号读卡器(国腾)

2个站点都引入了同一个的CAB包,目前如果打开其中任意一个,均可以使用。但如果再打开另外一个网站,结果新开的可以用,原来开的不能用,如果刷新了第一个打开的网站,则又可以用了,但第2个开的又不能用了,感觉好像是给劫持了。


//这是引用
<OBJECT Name="GT2ICROCX" width="0" height="0" CLASSID="CLSID:220C3AD1-5E9D-4B06-870F-E34662E2DFEA" CODEBASE="IdrOcx.cab#version=1,0,1,2"></OBJECT>


//设置回调函数
<SCRIPT LANGUAGE=javascript FOR=GT2ICROCX EVENT=GetData>MyGetData()</SCRIPT>
   
<SCRIPT LANGUAGE=javascript FOR=GT2ICROCX EVENT=GetErrMsg>MyGetErrMsg()</SCRIPT>
   
<SCRIPT LANGUAGE=javascript FOR=GT2ICROCX EVENT=ClearData>MyClearData()</SCRIPT>

就仅仅在不同站点改动回调函数的函数名如MyGetData()改为MyGetData1(),仍一样。

现在想做到刷一次卡,2个站点都能调用。


------解决方案--------------------
主要是CAB里控件没有考虑多线程的问题。
如果控件对每个网站域名开一个线程处理,就可以同时应对这样多个网站的局面了。
解决方法有两个:
一是找CAB制作厂商反映问题,重新制作。
二是分析一下如你所说的使用现象,对于一般用户来说是不是常见的。只要用户不怎么需要同时用这两个网站,而是你们开发测试时才碰到的现象,那当然就忍忍吧,除非让CAB厂商更改软件不需要再付钱(从该软件原功能要求来说,似乎涉及不到这个现象)。

------解决方案--------------------
其实你这是对资源的锁定,你的软件应该不是时时刻刻都要读取数据的,你可以在需要读取的时候打开cba资源,读取完毕就关掉,这样就不会影响另外一个系统使用这个资源了,而且当两个同使用时,你可以将一个挂起,等待另一个关闭即可。不过这样实现就看你能否自由加载和卸载那个链接资源了。
------解决方案--------------------
探讨
其中一个我没办法修改,另外一个是前一个的补充,自己写的。

如果每次都要刷新,那可非常不友好。