如何在 ASP.NET Core 3.1 中使用 Java?

Posted

技术标签:

【中文标题】如何在 ASP.NET Core 3.1 中使用 Java?【英文标题】:How to use Java in ASP.NET Core 3.1? 【发布时间】:2022-01-09 17:41:56 【问题描述】:

我正在使用 ASP.NET 构建一个 REST API,理想情况下它应该能够使用 Java 代码。我已经设法在一个简单的控制台应用程序中使用jni4net 在.NET 和Java 之间建立了一座桥梁。由于 .NET 和 Java 不存在互操作性,这是绝对必要的。

尽管如此,我无法使用 jni4net 在我的 ASP.NET 项目中创建桥接器。显然这是一个常见错误,因为 .NET core 2.1 或更高版本不支持下面显示的方法。我指的是这个问题:“Error in the webapp while connecting with JVM using jni4net from C#”。

MissingMethodException:找不到方法:'System.Reflection.Emit.AssemblyBuilder System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess)'。

请注意,我将 .NET core 3.1 用于我的 ASP.NET 项目和 jni4net 0.8.8.0。无论如何,如果需要,我会更改我的 .NET 版本。我当前在 Program.cs 中的实现如下所示:

using net.sf.jni4net;

public class Program

    public static void Main(string[] args)
    
        var setup = new BridgeSetup();
        setup.Verbose = true;
        Bridge.CreateJVM(setup); // Error is thrown here
    

有人知道是否有办法绕过此错误或如何在 ASP.NET 项目中使用 Java 代码?我非常感谢任何帮助或建议,纯粹的!

【问题讨论】:

理想情况下是的,在现实世界中没有。 @ThorbjørnRavnAndersen 您能否描述一下原因,以便我继续跟进?你有什么例子或参考我吗? 问题标题已更改。你不能轻易做到这一点。查看 ikvm 项目 【参考方案1】:

API 是一种媒介,它接收来自客户端的请求,在内部处理这些请求并响应客户端。

您可以通过在 .NET Core 上创建 API 并在您的 Java 项目中使用该 API 来做您想做的事情。

以最简单的方式,您可以在 .NET 项目的控制器中创建 API 端点,并使用 API 端点的目标 URL 向 Java 应用程序上的该 API 发送请求。 来自您的 API 的响应将采用 JSON 格式。

请注意,您可以使用任何语言的 API,因为您的应用程序和 API 之间的通信将通过 HTTP 请求和 JSON 响应进行。

一些有用的视频链接开始:

如何在 .NET Core 3.1 中构建 Restful API https://www.youtube.com/watch?v=fmvcAzHpsk8&t=11447s&ab_channel=LesJackson 如何在 Java 应用程序中使用 API https://www.youtube.com/watch?v=Fry7waUIJiY&ab_channel=PrakashShindalkar

我还想澄清一下,HTTP 只是一个协议。您可能也可以使用其他通信协议来实现您想要的,但是这个更受欢迎并且更适合您的需求。

【讨论】:

后续,也可以从nuget尝试IKVM。 好主意 - 但我需要从 C# 访问我的 java 代码,所以我可能会转过身来使用 Spring (Java) 构建我的 REST API。无论如何,您的回答给了我基础并帮助了我很多-谢谢!【参考方案2】:

据我所知 jni4net 与 .NET Core 不兼容。它适用于 .NET Framework。

这是绝对必要的,因为 .NET 和 Java 不存在互操作性。 我不知道情况,但它不应该是必要的。只需构建一个将 API 公开给 C# 代码的服务。瞧,你有一座桥。或者您可以使用 CORBA,但它太复杂了,根本不值得 imo。

【讨论】:

我不知道.NET Core 和.NET 之间有很大的区别,所以我今天已经学到了一些新东西。您能否再描述一下您的建议:只需构建一个将 API 暴露给 C# 代码的服务。瞧,你有一座桥。?我将非常感激,纯粹的! 我所说的基本上你可以用Java编写一个web api(应用程序编程接口),它封装了你需要在C#中使用的东西并调用那个api。 2 个不同的应用程序,一个用 C# 编写的只要求一些东西并得到结果,而一个用 Java 编写的应用程序完成了真正的工作。你能更准确地说明你需要做什么吗?所以我可以更好地帮助你。 你已经在这些细节上帮助了我很多 - 我会试试你的建议!谢谢。

以上是关于如何在 ASP.NET Core 3.1 中使用 Java?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp.net Core 3.1 中使用 Ajax 刷新或重新加载 ViewComponent?

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

如何正确解析要在 ASP.NET Core 3.1 的 ConfigureServices() 中使用的服务?

如何使用 Visual Studio 2019 在 Docker 容器中运行 ASP.NET Core 3.1 项目?

如何在我的 asp.net core 3.1 应用程序中播种用户和角色?

如何在 ASP.NET Core 3.1 中逐行迭代列表