是这样的,我需要调用一个C++动态库,但是前端无法直接调用所以使用C#封装了调用C++的动态库,然后C#做了个控制台监听程序,前端vue2调用监听,可以监听成功并且返回了正确的数据,但是浏览器会卡死,没有冗余的代码,简单的测试程序,有无大佬可以讲解一手
scanQrCode() {
const params = {
DzpzUrl: 'http://192.168.69.230:8002/localcfc/api/hsecfc/localQrCodeQuery',
FixmedinsCode: 'H43072400003',
workerId: '001001',
workerName: '管理员',
deptId: '0000000269',
deptName: '内一科'
};
axios.post('http://localhost:12345/scanQrCode', params, {
timeout: 30000, // 设置超时时间为 5 秒
})
.then(response => {
this.result = response.data;
})
.catch(error => {
console.error('Error calling C# function:', error);
this.result = 'Error: ' + error.message;
});
}
}
class Program
{
static void Main(string[] args)
{
var uri = new Uri("http://localhost:12345");
using (var nancyHost = new NancyHost(uri))
{
nancyHost.Start();
Console.WriteLine("Nancy is listening on " + uri);
Console.ReadKey();
}
}
}
public class MainModule : NancyModule
{
public MainModule()
{
Options["/scanQrCode"] = _ =>
{
var response = new Response();
response.Headers["Access-Control-Allow-Origin"] = "*";
response.Headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS";
response.Headers["Access-Control-Allow-Headers"] = "Content-Type";
return response;
};
After.AddItemToEndOfPipeline(ctx =>
{
ctx.Response.Headers["Access-Control-Allow-Origin"] = "*";
ctx.Response.Headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS";
ctx.Response.Headers["Access-Control-Allow-Headers"] = "Content-Type";
});
Post["/scanQrCode"] = parameters =>
{
var requestParams = this.Request.Body.AsString();
ScanQrCodeRequest queryParams = Newtonsoft.Json.JsonConvert.DeserializeObject<ScanQrCodeRequest>(requestParams);
var dzpzUrl = queryParams.DzpzUrl;
var fixmedinsCode = queryParams.FixmedinsCode;
var workerId = queryParams.WorkerId;
var workerName = queryParams.WorkerName;
var deptId = queryParams.DeptId;
var deptName = queryParams.DeptName;
var actualResult = DzybHandler.ScanQrCode(dzpzUrl, fixmedinsCode, workerId, workerName, deptId, deptName);
return actualResult;
};
}
}
后来把监听换成了Nancy还是同样会导致浏览器卡死
没有看到vue的代码, this.result = 是在Vue中定义的data?
应该和前端没有关系,我把后端中的调用C++的部分改成返回常量,浏览器端没有任务问题,返回也正常,应该是C++内部的问题,但是这个是国家医保电子凭证通用的动态库,用来获取身份信息的,改成异步调用动态库也不行,正在尝试别的方法,主要是想封装的尽量简单一点不那么繁琐
目前试了一下使用nancy + Tcp链接是可以搞定的,但是感觉有点复杂,大佬有碰到过吗,有更好一点的方法吗,主要是代码简洁
看得出你是启动了一个http服务接收浏览器的请求来满足你调用的需求,从表象理解,浏览器卡死肯定是前端代码哪里有问题导致,跟C#无关,你也可以用fiddler抓包去看下浏览器的请求是否有正常返回,返回的内容会不会超过预期,前端代码在收到response后的解析方面会不会有内存泄漏等方面的问题
前端扫描二维码,不用这么麻烦把