我有一个.NET网站,在后端使用MS Access数据库。我知道SQL Server更好,但我现在只能使用MS Access。我可以毫无问题地连接和执行插入、更新等操作,但有一个特殊的场景除外:当我执行ffmpeg.exe可执行文件时,它会运行一个大约一分钟的文件转换进程,并每秒钟更新数据库一次。当ffmpeg运行时,我让javascript执行ajax XMLHttpRequest post,同时,获取更新值,这样我就可以更新进度条了。
问题是在ffmpeg完成之前,XMLHttpRequest不会执行,但我需要它们同时并发运行。这里有一个简短的例子,用伪代码,用数字使它易于阅读,正在发生的事情:
...ffmpeg started...
var ajax = new XMLHttpRequest(); //1
ffmpeg update 1
var ajax = new XMLHttpRequest(); //2
ffmpeg update 2
var ajax = new XMLHttpRequest(); //3
ffmpeg update 3
var ajax = new XMLHttpRequest(); //4
...ffmpeg ended...
ajax.onreadystatechange... //1
ajax.onreadystatechange... //2
ajax.onreadystatechange... //3
ajax.onreadystatechange... //4
但我需要做的是:
...ffmpeg started...
var ajax = new XMLHttpRequest(); //1
ajax.onreadystatechange... //1
ffmpeg update 1
var ajax = new XMLHttpRequest(); //2
ajax.onreadystatechange... //2
ffmpeg update 2
var ajax = new XMLHttpRequest(); //3
ajax.onreadystatechange... //3
ffmpeg update 3
var ajax = new XMLHttpRequest(); //4
ajax.onreadystatechange... //4
...ffmpeg ended...
我认为ffmpeg锁定了数据库并阻止了ajax读取的执行,但它们应该同时发生并轮流访问数据库。我的连接字符串,在更新、读取等中都是这样的: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyDatabase.accdb;。
每个javascript帖子看起来像这样:
var obj = { filename: fName };
var myJSON = JSON.stringify(obj);
var url = 'Handler_Uploads.aspx?command=checkconversion&filename=' + fName;
var ajax = new XMLHttpRequest();
ajax.open("POST", url, true);
ajax.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
ajax.send(myJSON);
值得一提的是,我已经尝试将"Mode=Share Deny None;“添加到连接字符串中,但结果相同。
发布于 2019-12-25 20:02:43
找到问题了:它在“ffmpeg started”步骤中。显然,当它被调用时,它是同步执行的,而不是异步执行的,并阻止其他XMLHttpRequest执行,直到“ffmpeg started”停止。一旦我更正了服务器代码以异步执行“ffmpeg started”步骤,其他XMLHttpRequest就会按预期执行。
https://stackoverflow.com/questions/59475696
复制相似问题