2010-03-17 63 views
6

Chúng tôi đã viết một chương trình Java mà chúng tôi đang tìm cách sử dụng và tương tác với từ C#. Lựa chọn của chúng tôi là gì? Tối ưu nó sẽ có thể biên dịch ứng dụng Java như một thư viện (.DLL) mà chúng ta có thể tham khảo từ C# có thể sử dụng P/Invoke. Tuy nhiên, điều này dường như không phải là một tùy chọn theo một vài tìm kiếm đầu tiên trực tuyến.Tương tác với mã java từ C#

Chúng tôi chọn để có thể sử dụng ASP.NET để xây dựng một công cụ tìm kiếm được hỗ trợ bởi mã Java, vì vậy nếu điều này mở ra cho bất kỳ tùy chọn nào khác, vui lòng cho chúng tôi biết.

+0

Các bản sao có thể có: http://stackoverflow.com/questions/129989/how-to-call-java-code-from-c http://stackoverflow.com/questions/246096/how-can-i-integrate -java-with-net http://stackoverflow.com/questions/152967/can-you-use-java-libraries-in-a-vb-net-program http://stackoverflow.com/questions/191622/c -java-interoperation –

Trả lời

6

Xin lỗi, bạn cannot gọi java code/classesDirectly từ mã C#.

Một cách để làm điều này là wrap lên các lớp học java của bạn trong một java Web Service và gọi các lớp học indirectly thông qua giao diện dịch vụ web đó trong mã C# của bạn.

Một cách khác là sử dụng javareg.exe để hiển thị các lớp java là COM. Bạn có thể tìm thấy nó ở vị trí sau:

C:\Program Files\Microsoft VisualStudio\VIntDev98\bin\javareg.exe 

bài viết sau có thể giúp đỡ cũng

4

Cách tiếp cận đơn giản nhất có thể là xuất bản chức năng của thư viện java của bạn dưới dạng dịch vụ web và thêm tham chiếu web từ ứng dụng asp.net của bạn.

2

Java không phải là có nghĩa là để được nhúng trong một chương trình khác, vì vậy bạn cần một cây cầu. Giải pháp đơn giản nhất là sử dụng một socket: Tạo một quá trình Java để lắng nghe các lệnh trên một socket. Trong C#, gửi các lệnh đến socket và đọc câu trả lời.

Vấn đề chính ở đây là serialization nhưng nếu bạn sử dụng XML, nó không phải là một nỗi đau lớn nữa. Hãy thử serialization XML được tích hợp sẵn (see this article) hoặc các khung tùy chỉnh như XStream hoặc Simple.

+1

"Java không có nghĩa là được nhúng trong chương trình khác" Ngoại trừ trình duyệt web (Java Applet). – Powerlord

+0

@Powerlord: Ý tưởng hay.Vì vậy, bạn chỉ cần giả lập API trình duyệt Netscape trong ứng dụng của mình ... nhưng sau đó, tôi không chắc liệu bất kỳ nhà phát triển bình thường nào có thể xử lý thiết lập bảo mật, tránh phải thực sự mở applet trên màn hình ở đâu đó, v.v. –

+0

Digullla: Tôi đã không gợi ý rằng họ làm, tôi chỉ lưu ý rằng có một ngoại lệ. – Powerlord

0

Nó chắc chắn có thể bao bọc Java trong một .dll, và đã là một phần của nền tảng Java cốt lõi trong hơn 10 năm. JNI (Giao diện bản địa Java) có giao diện để nhúng một JVM vào mã của bạn, nghĩa là bạn có thể chạy các lớp Java bằng cách sử dụng liên kết kiểu C. Lưu ý rằng điều này sẽ yêu cầu bạn viết một trình bao bọc C đơn giản, có các mẫu bên trong: http://java.sun.com/docs/books/jni/html/invoke.html#11202

Như một số bài viết khác đề xuất, đôi khi bạn nên cân nhắc ít hơn, vì vậy bạn có thể cân nhắc sử dụng một thiết kế khác . Một tùy chọn sẽ là một cơ sở dữ liệu đơn giản, nơi ứng dụng Java thường xuyên thăm dò các yêu cầu từ mã C#. Nếu bạn muốn ghép nối chặt chẽ hơn, đối với những thứ như gọi lại, bạn có thể xem các giao diện phân tán.

Các vấn đề liên quan