2011-01-14 44 views
5

Chúng tôi phát triển một ứng dụng web ASP.Net được lưu trữ trên mạng nội bộ. Hiện tại, chúng tôi có một số trang ASPX xử lý các yêu cầu web từ phía máy khách và tương tác với các máy chủ của chúng tôi. Chúng tôi đang bắt đầu phát triển trên phiên bản ứng dụng chính tiếp theo của chúng tôi và chúng tôi đang quyết định về kiến ​​trúc.Dịch vụ web VS. Trang Aspx: Ưu và nhược điểm

Sự khác nhau giữa việc sử dụng các trang ASPX để xử lý các yêu cầu http so với việc sử dụng Dịch vụ Web toàn diện (rất có thể là một Dịch vụ WCF)?

Khi nghiên cứu vấn đề này, tôi đã gặp một số bài đăng có liên quan hữu ích một cách vừa phải, được xem herehere. Sự hiểu biết của tôi về một số khác biệt chính như sau:

  1. Trang ASPX bị giới hạn trong các loại yêu cầu mà họ có thể nhận được. Họ là đúng HTTP trong khi một dịch vụ WCF có thể có nhiều thiết bị đầu cuối để phục vụ một loạt các giao thức (HTTP, TCP, vv).
  2. Dịch vụ WCF được xác định cụ thể hơn do ServiceContracts. Điều này có nghĩa rằng nếu một dự án làm cho một tham chiếu đến dịch vụ, họ biết chính xác những gì mong đợi về phương pháp, cách sử dụng và tài liệu. Một trang ASPX là miễn phí cho tất cả về phương pháp chứa và yêu cầu được chấp nhận.

Tuy nhiên, dựa trên các khái niệm, vấn đề của tôi như sau:

  1. Khả năng hỗ trợ các giao thức khác nhau là một tính năng tuyệt vời về chống và khả năng tương thích trong tương lai, nhưng những gì lợi ích thực sự chúng ta nhìn thấy nếu hiện tại chúng tôi đang chỉ sử dụng nó để tương tác qua HTTP?
  2. Phù hợp với đối số trước đó của tôi, nếu chúng tôi chỉ tương tác với dịch vụ trên web, có bất kỳ điểm nào trong số đó thực sự tạo ra bất kỳ sự khác biệt nào không? Yêu cầu http không quan tâm đến bất kỳ chi tiết nào tốt hơn hoặc đảm bảo hợp đồng miễn là phương thức mà nó gọi là "chỉ hoạt động".

Có điều gì tôi thiếu không? Bất kỳ lợi ích quan trọng nào khi sử dụng dịch vụ? Cá nhân, tôi hỗ trợ kiến ​​trúc Dịch vụ Web. Tôi thích ý tưởng có một hệ thống linh hoạt và được xác định rõ ràng có thể hỗ trợ phát triển trong tương lai. Những gì tôi về cơ bản tìm cách để có được ra khỏi đây là một cách để đi đến một đồng nghiệp và nói "Đây phải là một dịch vụ cho lý do x y z và chúng tôi có thể thấy một b c cải tiến để làm như vậy".

Trả lời

4

WCF (và các dịch vụ web dựa trên asmx cũ) thực hiện rất nhiều tác vụ tuần tự hóa cho bạn. Bạn có thể trả về các đối tượng từ các phương thức và khung sẽ nối tiếp các đối tượng đó vào XML định dạng chính xác và cung cấp cho khách hàng với wsdl để họ có thể gọi các phương thức webservice của bạn và hiểu những gì họ đang quay lại.

Bạn thể làm điều này với một trang web trang (Tôi đặt cược có tải trọng của PHP "dịch vụ web" trên mạng), nhưng bạn sẽ phải làm tất cả những hệ thống ống nước mình.

Loại yêu cầu là WCF-magic. WCF có khái niệm "thiết bị đầu cuối" cho phép bạn tách riêng phương thức gọi dịch vụ từ những gì dịch vụ thực hiện. Nó chỉ là một kiến ​​trúc tốt hơn (mặc dù rất nhiều thứ rất phức tạp) để phân tách tốt hơn hai mối quan tâm đó.

Tôi nghi ngờ sự tắc nghẽn hiệu suất của bất kỳ dịch vụ web nào sẽ là lựa chọn sử dụng asmx thay vì WCF. Các hình phạt về hiệu năng trong kiến ​​trúc dịch vụ web hầu như luôn là do các giao diện trò chuyện và/hoặc các đồ vật/đối tượng rất lớn. Thực tế, bạn đang thực hiện một cuộc gọi từ xa đến một webservice làm cho sự khác biệt về tốc độ của WCF so với asmx không đáng kể trong hầu hết các trường hợp. WCF là linh hoạt hơn trong thiết kế, đó là một lý do hợp lệ để chọn nó. WCF không sử dụng DataContractSerializer mới hơn thay vì phương pháp cũ hơn được sử dụng trong các trục và được cho là nhanh hơn một chút. Tuy nhiên, tôi nghĩ bạn phải có quy mô cho khá nhiều người dùng để thấy sự khác biệt có ý nghĩa - bạn nên tìm kiếm giao diện trò chuyện và truy vấn db hoạt động kém hiệu quả trước tiên.

Tất nhiên, nếu nghi ngờ - đo trước, sau đó nhắm mục tiêu các khu vực cụ thể có hiệu suất kém.

+0

Thats đúng. Các kỹ thuật tuần tự hóa của WCF được cho là thực hiện nhanh hơn dịch vụ web asmx, đúng không? – yourbuddypal

+0

Meh. Có lẽ một chút, nhưng tôi nghi ngờ các nút cổ chai hiệu suất của bất kỳ webservice sẽ là sự lựa chọn để sử dụng asmx hơn là WCF. Các hình phạt về hiệu năng trong kiến ​​trúc dịch vụ web hầu như luôn là do các giao diện trò chuyện và/hoặc các đồ vật/đối tượng rất lớn. Thực tế, bạn đang thực hiện một cuộc gọi từ xa đến một webservice làm cho sự khác biệt về tốc độ của WCF so với asmx không đáng kể trong hầu hết các trường hợp. WCF là linh hoạt hơn trong thiết kế, đó là một lý do hợp lệ để chọn nó. –

+0

Re: serializers, DataContractJsonSerializer của WCF thực sự kém linh hoạt hơn JavaScriptSerializer của ASMX theo mặc định. JSS sẽ chấp nhận ngày tháng và enums như chuỗi, nhưng DCJS sẽ không.Đó là đặc biệt tẻ nhạt/phiền hà khi nói đến những ngày tháng. –

0

Dịch vụ web có thể tuần tự hóa các lớp học của bạn thông qua proxy, bạn không thể làm điều đó với trang aspx (AFAIK).

0

Một cách để làm điều này với các trang ASP.NET là cách tiếp cận từ điển: http://aspalliance.com/1922_PageMethods_In_ASPNET_AJAX.all, rất giống với tuyến dịch vụ web ASMX. Mọi thứ đã được nói là tôi đồng ý với, nhưng câu hỏi là bạn cần một dịch vụ chuyên dụng để phục vụ dữ liệu cho thế giới bên ngoài hay những dịch vụ này chỉ để phân phát dữ liệu trực tuyến cho khách hàng bên trong ứng dụng?

Tôi đã sử dụng phương pháp tiếp cận phương pháp trang trong liên kết của tôi vì hầu hết các dịch vụ đều tạo điều kiện thuận lợi cho AJAX trong trang và nó giữ tất cả mã lại với nhau. Ngoài ra, dữ liệu có thể được truy xuất thông qua JQuery ngay cả với các phương thức trang, và nó hỗ trợ tuần tự hóa và tạo proxy.

3

Bạn không nên sử dụng trang ASPX làm điểm cuối dịch vụ được ứng biến, như thường thấy trong thế giới PHP. Các yêu cầu cho các trang ASPX được lọc qua một vài HttpModules là chi phí không cần thiết cho các điểm cuối dịch vụ đơn giản và mỗi yêu cầu tạo ra một cá thể của lớp Page không có lý do gì.

ASMX vẫn là một lựa chọn tuyệt vời nếu tất cả những gì bạn cần là một điểm cuối rất đơn giản phản hồi trong XML hoặc JSON.

WCF rất mạnh mẽ nếu bạn cần linh hoạt hơn và sẵn sàng đối phó với gánh nặng cấu hình.

Một tùy chọn khác thường bị bỏ qua là sử dụng HttpHandler. Nó tương đối đơn giản/dễ dàng để ném cùng một ASHX HttpHandler, cung cấp cho bạn rất "gần với kim loại" truy cập vào yêu cầu/phản hồi với chi phí thấp hơn nhiều so với một trang ASPX.

2

Tôi có thể hiểu nhầm câu hỏi, nhưng tôi không chắc rằng so sánh của bạn ở đây hoàn toàn hợp lệ. Bạn đang so sánh công nghệ phân phối trang và dịch vụ với chi phí tương đối cao (ASPX trang) với công nghệ thuần túy chỉ dành cho dịch vụ (WCF và ASMX), phải không? Tôi nghĩ rằng sự so sánh giữa các dịch vụ web ASMX vs dịch vụ web WCF có thể có giá trị hơn, trong trường hợp WCF thắng handily về cấu hình, chưa kể đến hiệu suất: http://msdn.microsoft.com/en-us/library/bb310550.aspx

Xem thêm WCF vs ASPX webmethods vs ASMX webmethods cho một câu hỏi liên quan

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