gpt4 book ai didi

c# - CORBA 的 ASP.Net WebAPI 替代品?

转载 作者:行者123 更新时间:2023-11-30 18:45:21 25 4
gpt4 key购买 nike

我需要一些关于我正在从事的项目的指导。我们正在寻找 CORBA 服务器设置的替代品。简而言之,我们目前运行一个 CORBA 后台服务,该服务托管 10 个 C++ exe 实例,这是我们计算过程的入口点。 C++ 代码通过 COM 连接到一堆不同的 .net 和 C++ dll 和 OCX。我们还有另一个版本的可执行文件,它被编译为 .dll,我们可以以类似的方式调用它,但它只是一个单实例系统,所以一切都很好。

我们现在正在寻找用 WebAPI 替换 CORBA 组件的方法,因此我整理了一个基本的 ASP.net webAPI 项目,该项目能够将请求处理到此 C++ dll 中。同样,当它一次只需要处理 1 个请求时,这非常有效。当我开始测试并发请求时,事情开始偏离正轨。该请求很好地进入了我的处理程序,我可以看到 5 个请求(我到处都记录了正在发生的事情,)并且每个线程都创建了一个 dll 实例,但它们是同步运行的。

我发现即使在 ASP.net 处理程序中有多个线程,dll 是 STAThreaded(这在代码中得到确认)所以调用排队并且一次只处理 1 个。我的猜测是因为线程都在同一个进程中,dll 将所有线程视为同一个单元 (STAThread) 并导致队列。

我尝试了不同的 async/await 和 task.run 代码,我可以看到不同的线程,但它仍然归结为使 dll 同步运行的相同进程。我确实尝试通过将 CoInitializeEx(NULL,0x2) 更改为 CoInitializeEx(NULL,0x0) 来将 dll 更改为 MTA,但这似乎没有任何改变。

我现在已经没有什么想法了,我不认为更改为使用 .exe 版本并生成多个进程会起作用,因为有 CORBA 的东西允许创建返回对象并将其传回给调用代码。我需要能够获取在 exe 中创建的对象以在请求中发回。

抱歉发了这么长的帖子,希望有人能花时间阅读这面文字墙,并对我可以尝试的方法有一些想法。

谢谢!

最佳答案

我建议 WebAPI 体系结构不能很好地解决您的问题。通常,您不希望从 ASP.NET 生成长时间运行或阻塞的进程,因为很容易耗尽线程池并阻止服务器处理新请求。

如果您确实想继续拥有 WebAPI 端点,我会先接收请求并将它们放入队列,然后让客户端轮询或订阅完成的结果。

您可能有兴趣查看他们在 dotnetcore 3.0 中使用 gRPC 所做的事情 - 如果您想保留那种架构,但要更新平台。

关于c# - CORBA 的 ASP.Net WebAPI 替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58981603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com