API Web WCF và ASP.NET [đã đóng]


484

Tôi đã dành vài tháng để cố gắng nắm bắt các khái niệm đằng sau WCF và gần đây tôi đã phát triển ứng dụng dịch vụ WCF đầu tiên của mình.

Tôi đã đấu tranh khá nhiều để hiểu tất cả các cài đặt trong tệp cấu hình.
Tôi không bị thuyết phục về môi trường nhưng dường như bạn có thể làm những điều tuyệt vời với nó.

Một ngày khác, tôi phát hiện ra rằng Microsoft đã phát hành một thứ mới gọi là API Web ASP.NET .

Đối với những gì tôi có thể đọc nó là một khung RESTful , rất dễ sử dụng và thực hiện.

Bây giờ, tôi đang cố gắng tìm ra sự khác biệt chính giữa 2 khung công tác và liệu tôi có nên thử và chuyển đổi ứng dụng dịch vụ WCF của mình với API mới không.

Ai đó, xin vui lòng, giúp tôi hiểu sự khác biệt và cách sử dụng của mỗi?


12
+1 câu hỏi thú vị. có thể bạn sẽ nhận được phản hồi tốt tại lập trình
viên.stackexchange.com

1
Những tính năng nào của WCF "cũ" bạn đang sử dụng? Bạn đang cố gắng xây dựng API RESTful? Hoặc RPC, hoặc SOAP?
tuần hành

1
@marcind: cảm ơn câu trả lời của bạn. Đó chủ yếu là các cuộc gọi RESTful. Không có RPC nào cả.
LeftyX

4
Một câu trả lời hay khác có thể được tìm thấy tại stackoverflow.com/a/9859981/456814

1
cả hai đều là một và giống nhau nhưng sự khác biệt cũ mà người ta có thể gặp phải là wcf về cơ bản là dành cho mạng nội bộ và Webapi cho internet, vâng chắc chắn chúng ta cũng có thể khiến wcf yên tâm! về cơ bản cả hai đã chạy trên web giao thức http.http
LostCoder

Câu trả lời:


185

API Web ASP.NET mới là sự tiếp nối của dự án API Web WCF trước đó (mặc dù một số khái niệm đã thay đổi ).

WCF ban đầu được tạo ra để cho phép các dịch vụ dựa trên SOAP. Đối với các dịch vụ RESTful hoặc RPCish đơn giản hơn (nghĩ rằng các máy khách như jQuery) API Web ASP.NET nên là lựa chọn tốt.


36
Ngoài ra: Mặc dù WCF cung cấp một số hỗ trợ để viết các dịch vụ theo kiểu REST, nhưng sự hỗ trợ cho REST trong ASP.NET Web API đã hoàn thiện hơn và tất cả các cải tiến tính năng REST trong tương lai sẽ được thực hiện trong ASP.NET Web API msdn.microsoft.com/en- chúng tôi / thư viện / jj823172.aspx
Ohad Schneider

6
Trên thực tế, WCF ban đầu được tạo ra để thực hiện một lớp trừu tượng giữa dịch vụ SOAP hoặc RPC và máy khách. Vấn đề là tạo ra một kiến ​​trúc đơn (ABC) xung quanh cả hai cuộc gọi rất khác nhau này và xử lý hệ thống ống nước thông qua các tệp cấu hình.
Scott Marcus

4
Hạn chế thực sự với API Web ASP.NET là công cụ máy khách. Visual Studio hỗ trợ các công cụ tích hợp để hỗ trợ các thực thể khách hàng dịch vụ WCF liền mạch và tạo dịch vụ. Không hỗ trợ API Web. Tôi biết đó là HttpClientcái tuyệt vời, nhưng nó không quan tâm đến việc tạo thực thể và tuần tự hóa / giải tuần tự hóa.
Shimmy Weitzhandler

1
@Shimmy Thế còn việc tạo dịch vụ bằng cách sử dụng swagger?
Alex78191

1
@ Alex78191 cảm ơn phản hồi của bạn. Các thực thể được tạo ra có thể phát ra INotifyPropertyChangedcác thực thể khách hàng không? Làm thế nào về xác nhận?
Shimmy Weitzhandler

250

Đối với chúng tôi, WCF được sử dụng cho SOAP và API Web cho REST. Tôi cũng muốn API Web được hỗ trợ SOAP. Chúng tôi không sử dụng các tính năng nâng cao của WCF. Dưới đây là so sánh từ MSDN :

nhập mô tả hình ảnh ở đây


1
Và API Web hỗ trợ OData mà CSOM là một Godsend.
abbaf33f

12
Thật đáng ngạc nhiên khi MS với rất nhiều điều không nói thực sự xứng đáng. Ví dụ, WCF hỗ trợ JSON nhưng thông tin này được ẩn giấu rất kỹ trong "so sánh" này, trong khi nó nói về mặt văn bản rằng WebApi hỗ trợ JSON không chỉ một lần mà hai lần.
magallanes

1
cái bàn này là vô nghĩa. "JQuery" (trích dẫn sợ cho thủ đô J) là một giao thức và / hoặc định dạng?
hyankov

1
Hấp dẫn. MSDN đã sai khi đề cập HTTP như một giao thức vận chuyển. HTTP là một giao thức lớp ứng dụng.
RayLovless

80

API Web ASP.net là tất cả về HTTP và REST dựa trên GET, POST, PUT, DELETE với phong cách lập trình ASP.net MVC và JSON có thể trả về; API web dành cho tất cả quy trình trọng lượng nhẹ và các thành phần dựa trên HTTP thuần túy. Đối với một người đi trước với WCF ngay cả đối với dịch vụ web đơn giản hoặc đơn giản nhất, nó sẽ mang lại tất cả hành lý bổ sung. Đối với dịch vụ đơn giản, trọng lượng nhẹ cho ajax hoặc các cuộc gọi động luôn WebApi chỉ cần giải quyết nhu cầu. Điều này bổ sung gọn gàng hoặc giúp song song với ASP.net MVC.

Hãy xem podcast: Hanselminutes Podcast 264 - Đây không phải là WCF của cha bạn - Tất cả về WebAPI với Glenn Block của Scott Hanselman để biết thêm thông tin.


67

Trong các kịch bản được liệt kê dưới đây, bạn nên đi WCF:

  1. Nếu bạn cần gửi dữ liệu trên các giao thức như TCP, MSMQ hoặc MIME
  2. Nếu khách hàng tiêu thụ chỉ biết cách tiêu thụ tin nhắn SOAP

API WEB là một khung để phát triển các dịch vụ RESTful / HTTP.

Có rất nhiều khách hàng không hiểu SOAP như Trình duyệt, HTML5, trong những trường hợp đó, API WEB là một lựa chọn tốt.

Tiêu đề dịch vụ HTTP chỉ định cách bảo mật dịch vụ, cách lưu trữ thông tin, loại nội dung thư và phần thân HTTP có thể chỉ định bất kỳ loại nội dung nào như HTML không chỉ XML như các dịch vụ SOAP.


7
Điều này làm cho giả định rằng WCF chỉ xử lý các thông báo SOAP, một giả định không chính xác. Bạn cũng có thể hiển thị các điểm cuối REST trên các dịch vụ WCF. Tôi sẽ sửa đổi nó để nói, nếu bạn sẽ không sử dụng các tính năng của WCF (xem tin nhắn của tridy) thì API Web có ý nghĩa.
Mike

3
Yep WCF cũng nghỉ ngơi .. về cơ bản, api Web là một tập hợp con của chức năng WCF phù hợp nếu bạn làm các ứng dụng dữ liệu kiểu CRUD đơn giản.
user1496062

41

Kể từ khi sử dụng cả hai cho đến nay, tôi đã tìm thấy nhiều sự khác biệt giữa WCF và API Web. Cả hai ngăn xếp công nghệ đều phù hợp với các kịch bản khác nhau, vì vậy không thể nói cái nào tốt hơn, điều này phụ thuộc vào cấu hình và kịch bản.

Properties              ASP.Net Web API                         WCF
--------------------------------------------------------------------------------------------------
End point (mainly)      Http based                              SOAP based
Service Type            Front End                               Back-end
Support                 caching, compression, versioning        No
Framework               ASP.net                                 WCF
Orientation             Resource Oriented                       Service Oriented
Transports              http                                    http, tcp, MSMQ, Named pipe
Message pattern         Request reply                           request Reply, one way, duplex
Configuration overhead  Less                                    Much
Security                lesser than WCF (web standard security) Very high (WS-I standard)
Hosting                 IIS                                     IIS, Windows Service, Self hosting
Performance             Fast                                    A bit slower than Web API
In use from             .NET 4.0                                .NET 3.5

Lưu ý: Dữ liệu không chỉ là quan điểm của tôi, nó còn được thu thập từ các trang web chính thức khác.


12
API dịch vụ web cũng có thể được lưu trữ tự (Owin / Katana) cũng như trong dịch vụ Windows
Monis Iqbal

trừ 1 để xây dựng bảng bằng hình ảnh thay vì HTML vì điều này ngăn chỉnh sửa câu trả lời để cải thiện.
Ahsan Ahmed

34

WCF sẽ cung cấp cho bạn rất nhiều thứ, nó thậm chí không thể so sánh với bất cứ thứ gì. Trừ khi bạn muốn tự mình thực hiện (đặt tên một vài) xác thực, ủy quyền, mã hóa, xếp hàng, điều chỉnh, nhắn tin đáng tin cậy, ghi nhật ký, phiên, v.v. WCF không [chỉ] dịch vụ web; WCF là một nền tảng phát triển cho SOA.


11
Nếu tôi không nhầm, tôi nghĩ rằng API WEB cũng cung cấp hầu hết các chức năng bạn đã liệt kê.
Alex

4
Không có api web không cung cấp những thứ này hoặc cung cấp các phiên bản rất đơn giản.
user1496062

3
Vâng, nó là gì - nó có cung cấp cho họ hay không?

5
Để xác thực và ủy quyền, hãy kiểm tra asp.net/web-api/overview/security/ ,. tl; dr: Nó hỗ trợ nó chắc chắn trong IIS. Để mã hóa, có thể bạn sẽ cần sử dụng SSL, ASP.NET xử lý hàng đợi một cách tự nhiên (nhưng điều đó được thực hiện dựa trên các luồng công nhân có sẵn so với các yêu cầu đến). Phiên tồn tại (nhưng tôi không bao giờ khuyên bạn nên sử dụng Phiên trực tiếp). Ghi nhật ký đủ dễ để thiết lập (thông qua ActionFilters hoặc tương tự). Một thay thế cho nhắn tin đáng tin cậy là sử dụng SignalR (mặc dù không chính xác).
James Haug

7
"Không thể so sánh với bất cứ điều gì" ?? Không có khả năng.
bbsimonbb

16

Tại sao tôi trả lời:

Tôi đã mất rất nhiều thời gian để hiểu sự khác biệt giữa hai công nghệ này. Tôi sẽ đặt tất cả những điểm đó ở đây mà tôi nghĩ rằng "Nếu tôi có những điểm này vào thời điểm mà tôi đang tự hỏi xung quanh để tìm kiếm câu trả lời này, thì tôi đã quyết định rất sớm trong việc lựa chọn công nghệ cần thiết của mình."

Nguồn thông tin:

Giải phóng Microsoft® Visual Studio® 2015

ISBN-13: 980-0-672-33736-9 ISBN-10: 0-672-33736-3

Tại sao ASP.NET Web API và WCF:

Trước khi so sánh các công nghệ của ASP.NET Web API và WCF, điều quan trọng là phải hiểu thực sự có hai kiểu / tiêu chuẩn để tạo dịch vụ web: REST (Chuyển giao trạng thái đại diện) và SOAP / WSDL. SOAP / WSDL là tiêu chuẩn ban đầu mà các dịch vụ web được xây dựng. Tuy nhiên, nó rất khó sử dụng và có các định dạng thông báo cồng kềnh (như XML) làm giảm hiệu suất. Các dịch vụ dựa trên REST nhanh chóng trở thành lựa chọn thay thế. Chúng dễ viết hơn vì chúng tận dụng các cấu trúc cơ bản của HTTP (GET, POST, PUT, DELETE) và thường sử dụng các định dạng thông báo nhỏ hơn (như JSON). Do đó, các dịch vụ HTTP dựa trên REST hiện là tiêu chuẩn để viết các dịch vụ nhắm mục tiêu nghiêm ngặt vào Web.

Hãy xác định mục đích của API Web ASP.NET

ASP.NET Web API là công nghệ của Microsoft để phát triển các dịch vụ web HTTP dựa trên REST. (Từ lâu, nó đã thay thế ASMX của Microsoft, vốn dựa trên SOAP / WSDL.) API Web giúp dễ dàng viết các dịch vụ mạnh mẽ dựa trên các giao thức HTTP mà tất cả các trình duyệt và thiết bị gốc đều hiểu. Điều này cho phép bạn tạo các dịch vụ để hỗ trợ ứng dụng của mình và gọi chúng từ các ứng dụng web, máy tính bảng, điện thoại di động, PC và máy chơi game khác. Phần lớn các ứng dụng được viết ngày hôm nay để thúc đẩy kết nối Web hiện tại sử dụng các dịch vụ HTTP theo một cách nào đó.

Bây giờ chúng ta hãy xác định mục đích của WCF:

Giao tiếp trên Internet không phải lúc nào cũng là phương tiện hiệu quả nhất. Ví dụ: nếu cả máy khách và dịch vụ tồn tại trên cùng một công nghệ (hoặc thậm chí là cùng một máy), chúng thường có thể đàm phán một phương tiện hiệu quả hơn để giao tiếp (như TCP / IP). Các nhà phát triển dịch vụ thấy mình đưa ra những lựa chọn giống như họ đang cố gắng tránh. Bây giờ họ sẽ phải lựa chọn giữa việc tạo các dịch vụ nội bộ hiệu quả và có thể có quyền truy cập rộng rãi được tìm thấy qua Internet. Và, nếu họ phải hỗ trợ cả hai, họ có thể phải tạo nhiều phiên bản dịch vụ của họ hoặc ít nhất là các proxy riêng biệt để truy cập dịch vụ của họ. Đây là vấn đề Microsoft đã giải quyết với WCF .

Với WCF, bạn có thể tạo dịch vụ của mình mà không cần quan tâm đến ranh giới. Sau đó, bạn có thể để WCF lo lắng về việc chạy dịch vụ của mình theo cách hiệu quả nhất, tùy thuộc vào ứng dụng khách gọi. Để quản lý tác vụ này, WCF sử dụng khái niệm điểm cuối. Dịch vụ của bạn có thể có nhiều điểm cuối (được định cấu hình tại thời điểm thiết kế hoặc sau khi triển khai). Mỗi điểm cuối cho biết cách dịch vụ có thể hỗ trợ ứng dụng khách gọi: qua Web, thông qua điều khiển từ xa, thông qua Hàng đợi Tin nhắn của Microsoft (MSMQ), v.v. WCF cho phép bạn tập trung vào việc tạo chức năng dịch vụ của bạn. Nó lo lắng về cách nói chuyện hiệu quả nhất với việc gọi điện cho khách hàng. Theo cách này, một dịch vụ WCF duy nhất có thể hỗ trợ hiệu quả nhiều loại khách hàng khác nhau.

Ví dụ về WCF:

Xem xét ví dụ:

Dữ liệu khách hàng được chia sẻ giữa các ứng dụng. Mỗi ứng dụng có thể được viết trên một nền tảng khác nhau và nó có thể tồn tại ở một vị trí khác nhau. Bạn có thể trích xuất giao diện khách hàng vào dịch vụ WCF cung cấp quyền truy cập chung vào dữ liệu khách hàng được chia sẻ. Điều này tập trung dữ liệu, giảm trùng lặp, loại bỏ đồng bộ hóa và đơn giản hóa việc quản lý. Ngoài ra, bằng cách sử dụng WCF, bạn có thể định cấu hình các điểm cuối dịch vụ để hoạt động theo cách có ý nghĩa với máy khách đang gọi. Hình hiển thị ví dụ từ trước với quyền truy cập tập trung dữ liệu khách hàng trong dịch vụ WCF.

Đây là cách WCF phục vụ các khách hàng khác nhau

Phần kết luận:

i) Khi nào nên chọn API Web:

Không thể phủ nhận rằng các dịch vụ HTTP dựa trên REST như các dịch vụ được tạo bằng API Web ASP.NET đã trở thành tiêu chuẩn để xây dựng các dịch vụ web. Các dịch vụ này cung cấp một cách tiếp cận dễ dàng, đơn giản cho các nhà phát triển dịch vụ xây dựng web. Các nhà phát triển web hiểu HTTP GET và POST và do đó thích ứng tốt với các loại dịch vụ này. Do đó, nếu bạn đang viết các dịch vụ được nhắm mục tiêu nghiêm ngặt vào HTTP , ASP.NET Web API là lựa chọn hợp lý.

ii) Khi nào nên chọn WCF:

Công nghệ WCF rất hữu ích khi bạn cần hỗ trợ nhiều điểm cuối dịch vụ dựa trên các giao thức và định dạng thông báo khác nhau. Các sản phẩm như Microsoft BizTalk tận dụng WCF để tạo các dịch vụ mạnh mẽ có thể được sử dụng trên Web thông qua các cấu hình máy-máy khác nhau. Tuy nhiên, nếu bạn cần phải viết một ứng dụng giao tiếp qua TCP / IP khi được kết nối với cục bộ mạng và hoạt động qua HTTP khi ở ngoài mạng, WCF là câu trả lời của bạn .

Được cảnh báo:

Các nhà phát triển web thường xem WCF là khó khăn và phức tạp hơn để phát triển. Do đó, nếu bạn không thấy trước nhu cầu về dịch vụ đa phương tiện, bạn có thể sẽ gắn bó với API Web ASP.NET.


1
Vui lòng không thêm cùng một câu trả lời cho nhiều câu hỏi . Trả lời câu hỏi hay nhất và đánh dấu phần còn lại là trùng lặp, một khi bạn kiếm đủ danh tiếng. Nếu nó không phải là một bản sao, điều chỉnh bài đăng cho câu hỏi và gắn cờ để xóa.
Bhargav Rao

12

Có một so sánh trên MSDN về điều này

API Web WCF và ASP.NET

Đối với tôi, sự lựa chọn là về khách hàng là ai và họ ở đâu?

Trong công ty Máy khách dựa trên mạng và .NET: Sử dụng WCF với liên kết TCP (Giao tiếp nhanh hơn HTTP)

Bên ngoài Mạng công ty và sử dụng các công nghệ đa dạng như PHP, Python, v.v . : Sử dụng API Web với REST


9

Nói về kinh doanh, WebApi thiếu WSDL, vì vậy các nhà phát triển nên ghi lại tất cả bằng tay. Và nếu, ví dụ, hoạt động WebApi trả về một danh sách các đối tượng thì máy khách sẽ tạo các đối tượng theo cách thủ công, tức là WebAPI thực sự dễ bị lỗi định nghĩa.

Sự chuyên nghiệp của Webapi là nhẹ hơn WCF.


3
WCF == WS- *, webapi == REST
BozoJoe

7

Liên quan đến tuyên bố "WebApi thiếu WSDL", có một số cách để tạo Rest client. Một cách tiếp cận phổ biến là Swagger UI / (Swashbukkle Nuget). Điều này mang lại một giao diện phong phú để hiểu lược đồ đầu vào và đầu ra của điểm cuối REST và công cụ trực tuyến để kiểm tra các điểm cuối.

JSON LD (Tài liệu được liên kết của Json) là một tiêu chuẩn mới nổi khác sẽ cải thiện hơn nữa trải nghiệm của nhà phát triển REST dựa trên JSON bằng cách hiển thị lược đồ JSON với ngữ nghĩa tốt hơn.


1

Với wcf, chúng tôi có thể định cấu hình và hiển thị cùng một hỗ trợ dịch vụ cho nhiều điểm cuối như tcp, http. Nếu bạn muốn dịch vụ của mình chỉ dựa trên http thì sẽ tốt hơn khi sử dụng API web. API Web có cấu hình rất ít khi so sánh với wcf và nhanh hơn một chút so với wcf. Wcf cũng hỗ trợ các dịch vụ yên tĩnh. Nếu bạn có giới hạn của .Net framework 3.5 thì tùy chọn của bạn là wcf.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.