2013-01-23 28 views
7

Tôi đã làm việc trên một ứng dụng web một trang hoàn toàn dựa trên ajax (không có POST) và hiện tại tôi đang sử dụng ASMX cho các dịch vụ web trong khi đang phát triển. Các dịch vụ web làm việc với dữ liệu JSON. Đối với việc phát hành, tôi biết tôi sẽ cần phải nâng cấp lên WCF hoặc WebAPI.WCF vs WebAPI và thiết bị di động gốc

Cuối cùng, tôi dự định xây dựng các ứng dụng di động gốc sẽ hoạt động với các dịch vụ web giống như ứng dụng web. Mọi thứ đều bình đẳng, nếu tôi phải lựa chọn giữa hai, tôi nên chọn tùy chọn nào để các dịch vụ web có thể làm việc với các ứng dụng khách khác nhau?

Cảm ơn.

Trả lời

8

Nếu ứng dụng của bạn được thiết kế chỉ có thể truy cập bằng thiết bị di động từ nhiều nền tảng khác nhau, điều đó có nghĩa là bạn sẽ phải tìm mẫu số dễ dàng nhất cho tất cả các nền tảng này. Vì vậy, về mặt khác, nếu khả năng tương tác là mối quan tâm của bạn, bạn sẽ tập trung vào một công nghệ giao tiếp duy nhất mà tất cả nền tảng có thể sử dụng.

JSON + REST dường như là mẫu số dễ dàng nhất phổ biến cho nhiều nền tảng hiện nay (tất nhiên bao gồm cả các nền tảng di động). Và nếu đó là công nghệ giao tiếp duy nhất bạn sẽ thực hiện, WebAPI có vẻ là sự lựa chọn hiển nhiên.

WCF dễ mở rộng, có thể cấu hình được, bạn có thể cắm các ràng buộc khác nhau, mã hóa khác nhau, trên các giao thức khác nhau, thực hiện SOAP, WS- *, nó có thể rất nhanh (với các ràng buộc được chọn cẩn thận), bạn cũng có thể làm JSON + REST với nó, nhưng bạn không cần tất cả sức mạnh đó (và WCF cũng có thể khá phức tạp vì tất cả các tính năng này), những gì bạn cần có vẻ rất phổ biến và đơn giản. Với yêu cầu của bạn, tôi sẽ chọn WebAPI.

6

Tôi đã phát triển một tập hợp các dịch vụ web RESTful bằng WCF và gần đây đã bắt đầu một dự án để thay thế WCF bằng ASP.NET Web API. Kinh nghiệm của tôi là ASP.NET Web API dễ học hơn WCF và dễ làm việc hơn. Tôi cũng có thể cung cấp cho bạn một vài lý do tại sao bạn muốn chọn ASP.NET Web API:

  • Các url WCF bao gồm phần mở rộng '.svc'. Ví dụ: http://localhost/MyRestService.svc/. Điều này không gây ra vấn đề với khách hàng, nhưng nó xấu xí. Bạn có thể loại bỏ phần mở rộng .svc bằng cách sử dụng mô-đun Rewrite URL IIS (xem this blog post), nhưng với ASP.NET Web API, bạn không có vấn đề gì ngay từ đầu.

  • WCF sử dụng DataContractJsonSerializer, tạo JSON có thể gây khó khăn cho khách hàng. Ví dụ cụ thể bao gồm datesdictionaries. Bạn có thể thay đổi serializer được WCF sử dụng (xem SO question), nhưng ASP.NET Web API sử dụng JSON.NET theo mặc định, có khả năng cấu hình cao.

Nếu tôi bắt đầu hôm nay và tạo một dịch vụ web RESTful mới, hãy chọn ASP.NET Web API trên WCF sẽ là một lựa chọn dễ dàng vì đây là những gì nó được thiết kế.

+0

Lý do đầu tiên: Đó chỉ là quan điểm của bạn, cá nhân tôi không nghĩ rằng nó là xấu xí cũng không đẹp :). Lý do thứ hai: Tốt nhất! Tôi đã gần như quên rằng DataContractJsonSerializer có một số bất ngờ của riêng nó mà chúng tôi chỉ tìm ra sau khi chơi với nó một thời gian, như thế này: [Làm thế nào để bạn xử lý Infinity trong JSON được tạo ra trong .NET] (http: // stackoverflow. com/questions/7997657/how-do-you-handle-vô-trong-json-được tạo ra trong mạng) –

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