2009-07-08 31 views
9

Đã từng là một công cụ .NET cho đến khi bắt đầu một công việc mới gần đây; Tôi chỉ thực hiện phát triển và tiêu thụ dịch vụ Web trong C# /. Tuy nhiên tôi đang bắt tay vào cuộc hành trình để tìm hiểu những điều khó hiểu khi thực hiện nó trên nền tảng J2EE, và tôi tò mò về những khác biệt chính trong loại phát triển cụ thể này.Sự khác biệt lớn giữa J2EE và C# /. Net khi phát triển các Dịch vụ Web

Lưu ý: Tôi đã quen với Ngôn ngữ Java ở cấp giao diện điều khiển/giao diện đơn giản, nhưng không có nhiều kinh nghiệm với "Cách đặt cùng một Kiến trúc dịch vụ web chức năng" bằng cách sử dụng nó.

Cập nhật: Câu trả lời hay cho đến giờ, tôi chỉ muốn thêm vào cấu trúc lớp dịch vụ web đơn giản dường như không hiển thị quá nhiều sự khác biệt; nhưng làm thế nào về quan điểm của việc đưa nó tất cả cùng với logic DB và thực sự lưu trữ nó - nhận được các dịch vụ đang chạy và làm việc/làm thế nào nó tương tác với.

Trả lời

9

Trong khi chỉ có một cách để thực hiện Dịch vụ Web bằng .NET bằng cách sử dụng Công nghệ Microsoft, Dịch vụ Web Java rất bị phân mảnh. Xem ví dụ: this câu hỏi. Hầu hết các khung công tác đều có thể thực hiện cả hai dịch vụ web đầu tiên của hợp đồng (bắt đầu từ tệp WSDL) và mã đầu tiên (bắt đầu từ mã nguồn). Mỗi khung công tác cũng có cách lưu trữ Dịch vụ Web. Ví dụ, khuôn khổ Axis2 triển khai các dịch vụ web dưới dạng các tệp AAR bên trong Ứng dụng Web Axis2. Các khung công tác khác triển khai các dịch vụ web bên trong một tệp tin WAR (Axis2 cũng có thể làm).

Đối với những người từ .NET đến Java, việc chọn khung dịch vụ web luôn là vấn đề. Tích hợp IDE cũng không tốt như vậy với Visual Studio.

Nếu bạn là người mới trong J2EE, tôi khuyên bạn nên xem xét khung công tác Spring. Spring có một tiểu dự án (Spring-WS) cho phép bạn tạo các dịch vụ web hợp đồng đầu tiên. Tích hợp với DB và logic ứng dụng dễ dàng hơn nhiều với khung tiêm phụ thuộc như Spring. Apache CXF cũng tích hợp độc đáo với Spring.

+0

Một số điểm rất tốt ở đó - Tôi sẽ không bận tâm trả lời câu hỏi này ngay bây giờ! Lời khuyên tốt. – serg10

+0

Tôi chưa bao giờ thử Mùa xuân. Có dễ sử dụng Spring cho logic sau đó EJB3 không? –

+0

Hầu hết sẽ nói rằng mùa xuân là tốt hơn so với EJB3. Nó cũng linh hoạt hơn, vì nó không yêu cầu Máy chủ ứng dụng thực hiện đầy đủ tiêu chuẩn JEE. EJB3 cũng không tệ, nhưng tôi khuyên bạn nên đầu tư thời gian vào mùa xuân. – kgiannakakis

4

Tôi chưa bao giờ thử trước dịch vụ web nhưng gần đây. Và tôi đã rất ngạc nhiên khi thấy nó đơn giản như thế nào trong Java với JAX-WS.

Đây là một dịch vụ web

@WebService 
class BusinessProcess implements IBusinessProcess 
{ 
    public HelloWorldObject helloWorld() 
    { 
     return new HelloWorldObject("Earth"); 
    } 
} 

Và đó là nó.
Nếu bạn cần thêm một logic và mức độ như các thực thể DB, nó được thêm vào dễ dàng như tôi chỉ có thể tưởng tượng với EJB3.

Theo như tôi vừa thấy cách C# để xác định WebService, không có sự khác biệt lớn nào cả.

[WebService(...)] 
    public class BusinessProcess : System.Web.Services.WebService 
    { 
     [WebMethod] 
     public HelloWorldObject helloWorld() 
     { 
      return new HelloWorldObject("Earth"); 
     } 
    } 

Tôi tin rằng có sự khác biệt trong logic hơn nữa.

3

Tôi khuyên bạn nên sử dụng khung công tác Apache CXF để quay. Tôi đã chọn nó cho một dự án lớn ở đây tại nơi làm việc và nó hoạt động tuyệt vời! Điều này mang lại lợi ích gì cho bạn hơn EJB3? Hmmm ... Tôi không thể nói ngoại trừ việc tôi đã sử dụng CXF, trong khi EJB3 chưa bao giờ ở trong nhà bếp của tôi (tham khảo Cheers tối nghĩa).

Với CXF, mã không nhiều hơn một vài chú thích ở đây và ở đó. Nó sử dụng chú thích JAXB tiêu chuẩn cho các đối tượng đầm lầy. Qua cấu hình nó cũng có thể đặt tên lửa đánh chặn trước và sau các dịch vụ web gọi nếu bạn muốn làm khai thác gỗ vv

@WebService 
public interface UserService { 
    public Collection<User> getUsers(@WebParam(name = "systemID") Long sysID); 
} 

Lưu ý rằng @WebParam chú thích là không bắt buộc, nhưng có vẻ đẹp hơn trong WSDL hơn những thứ như thế arg0. Vâng, có thể có một chút cấu hình XML để đi cùng với điều đó:

<!-- the #userService is a reference to a Spring bean defined elsewhere --> 
<jaxws:endpoint id="userWS" implementor="#userService" 
    implementorClass="com.blah.blah.blah.UserServiceImpl" 
    address="/UserService" /> 

Theo như tiêu thụ các dịch vụ web ... Đọc Người dùng CXF Hướng dẫn sẽ cung cấp cho bạn một hương vị trong bao đã xong: http://cwiki.apache.org/CXF20DOC/developing-a-consumer.html

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