首页 新闻 会员 周边 捐助

Vue2前端调用C#监听导致浏览器卡死

0
[待解决问题]

是这样的,我需要调用一个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还是同样会导致浏览器卡死

矜持先森么么哒的主页 矜持先森么么哒 | 初学一级 | 园豆:4
提问于:2025-06-20 16:54
< >
分享
所有回答(3)
0

没有看到vue的代码, this.result = 是在Vue中定义的data?

慧☆星 | 园豆:5809 (大侠五级) | 2025-06-23 09:47

应该和前端没有关系,我把后端中的调用C++的部分改成返回常量,浏览器端没有任务问题,返回也正常,应该是C++内部的问题,但是这个是国家医保电子凭证通用的动态库,用来获取身份信息的,改成异步调用动态库也不行,正在尝试别的方法,主要是想封装的尽量简单一点不那么繁琐

支持(0) 反对(0) 矜持先森么么哒 | 园豆:4 (初学一级) | 2025-06-23 10:04

目前试了一下使用nancy + Tcp链接是可以搞定的,但是感觉有点复杂,大佬有碰到过吗,有更好一点的方法吗,主要是代码简洁

支持(0) 反对(0) 矜持先森么么哒 | 园豆:4 (初学一级) | 2025-06-23 10:21
0

看得出你是启动了一个http服务接收浏览器的请求来满足你调用的需求,从表象理解,浏览器卡死肯定是前端代码哪里有问题导致,跟C#无关,你也可以用fiddler抓包去看下浏览器的请求是否有正常返回,返回的内容会不会超过预期,前端代码在收到response后的解析方面会不会有内存泄漏等方面的问题

Tonhuan-Cloud | 园豆:238 (菜鸟二级) | 2025-07-07 16:10
0

前端扫描二维码,不用这么麻烦把

w0rd | 园豆:524 (小虾三级) | 2025-07-12 11:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册