Sự khác biệt giữa các dịch vụ web WCF và ASMX là gì?


375

Tôi hoàn toàn bối rối giữa các dịch vụ web WCF và ASMX. Tôi đã sử dụng rất nhiều dịch vụ web trong giai đoạn đầu của mình và bây giờ có một thứ mới được giới thiệu có tên là WCF. Tôi vẫn có thể tạo WCF hoạt động như một dịch vụ web. Tôi nghĩ sẽ có nhiều thứ hơn trong WCF.

Sự khác biệt giữa dịch vụ WCF và Web là gì? Khi nào nên sử dụng mỗi một?


5
Không có cách nào đây là một câu hỏi đề nghị. Cả ASMX và WCF đều không phải là sản phẩm. Chúng là hai lần lặp lại của các dịch vụ web trong ngăn xếp của Microsoft. Câu hỏi là sự khác biệt là gì, và nó có đáng để tôi học hỏi cái mới không? Đây không giống như "tôi nên sử dụng điều khiển Telerik hoặc Infragistic.
John Saunders

Câu trả lời:


391

Keith Elder so sánh độc đáo ASMX với WCF ở đây. Kiểm tra nó ra.

Một so sánh khác về ASMX và WCF có thể được tìm thấy ở đây - Tôi không đồng ý 100% với tất cả các điểm ở đó, nhưng nó có thể cho bạn một ý tưởng.

WCF về cơ bản là "ASMX trên stereoids" - nó có thể là tất cả những gì ASMX có thể - cộng với nhiều hơn nữa! .

ASMX là:

  • dễ dàng và đơn giản để viết và cấu hình
  • chỉ có sẵn trong IIS
  • chỉ có thể gọi từ HTTP

WCF có thể là:

  • được lưu trữ trong IIS, Dịch vụ Windows, ứng dụng Winforms, ứng dụng bảng điều khiển - bạn có toàn quyền tự do
  • được sử dụng với HTTP (REST và SOAP), TCP / IP, MSMQ và nhiều giao thức khác

Tóm lại: WCF ở đây để thay thế hoàn toàn ASMX.

Kiểm tra Trung tâm nhà phát triển WCF trên MSDN .

Cập nhật: liên kết dường như đã chết - hãy thử điều này: Windows Communication Foundation là gì?


15
Với visual studio 2010 .net 4.0 WCF dễ viết như ASMX, không có lý do gì để viết ASMX nữa. WCF là cách nhanh hơn, linh hoạt hơn, an toàn hơn. ASMX là di sản và không ai vẫn nên viết nó giai đoạn.
Tom Stickel

13
"Hầu hết các nhà phát triển đều cho rằng ASMX không yêu cầu IIS; xét cho cùng, đó là trường hợp sử dụng duy nhất họ từng thấy. Nhưng sự thật là ASMX không có bất kỳ sự phụ thuộc kỹ thuật nào vào IIS." msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick

2
@MrNick: đúng rồi. Không có IIS, nhưng vẫn chỉ có HTTP và so sánh mã để lưu trữ ASMX với mã để lưu trữ dịch vụ WCF.
John Saunders

1
Thật không may, liên kết keithelder.net/2008/10/17/wcf-vs-asmx-webservice bị hỏng.
Robert

2
@codemonkeyliketab: phản hồi đã hơn 6 tuổi - lightyears trong thời đại internet! Tôi đã cố gắng tìm một sự thay thế cho Trung tâm nhà phát triển WCF - xem bản cập nhật của tôi
marc_s

37

Các dịch vụ web ASMX chỉ có thể được gọi bằng HTTP (dịch vụ web truyền thống với .asmx). Trong khi Dịch vụ WCF hoặc thành phần WCF có thể được gọi bằng bất kỳ giao thức nào (như http, tcp, v.v.) và bất kỳ loại vận chuyển nào.

Thứ hai, dịch vụ web ASMX không linh hoạt. Tuy nhiên, Dịch vụ WCF rất linh hoạt. Nếu bạn tạo một phiên bản mới của dịch vụ thì bạn chỉ cần để lộ một kết thúc mới. Do đó, các dịch vụ nhanh nhẹn và đó là một cách tiếp cận rất thực tế, xem xét các xu hướng kinh doanh hiện tại.

Chúng tôi phát triển WCF dưới dạng hợp đồng, giao diện, hoạt động và hợp đồng dữ liệu. Là nhà phát triển, chúng tôi tập trung nhiều hơn vào các dịch vụ logic kinh doanh và không cần lo lắng về việc xếp kênh. WCF là API lập trình hợp nhất cho bất kỳ loại dịch vụ nào, vì vậy chúng tôi tạo dịch vụ và sử dụng thông tin cấu hình để thiết lập cơ chế giao tiếp như HTTP / TCP / MSMQ, v.v.


11
Có lẽ đó chỉ là tôi, nhưng đoạn # 2 và # 3 nổi bật như một BS tiếp thị.
Neolisk

@Net Các chuyên gia u đã nói "Nếu bạn tạo một phiên bản mới của dịch vụ thì bạn chỉ cần phơi bày một kết thúc mới" bạn đang cố gắng nói gì?
Mou

@Mou, ý anh là phơi bày một cái endpointtôi mới đoán. Thích<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw

25

Đây là một câu hỏi rất cũ, nhưng tôi không cảm thấy rằng những lợi ích của ASMX đã được mô tả một cách công bằng. Mặc dù không linh hoạt khủng khiếp, các dịch vụ web ASMX rất đơn giản để sử dụng và hiểu. Trong khi WCF linh hoạt hơn, nó cũng phức tạp hơn để đứng lên và cấu hình.

Các dịch vụ web ASMX sẵn sàng đứng lên và thêm làm tài liệu tham khảo dịch vụ web ngay khi bạn thêm tệp. (giả sử xây dựng dự án của bạn)

Đối với quy trình phát triển đơn giản của create webservice-> run webservice->add webservice reference , dịch vụ web ASMX có rất ít sai sót, không nhiều đến mức bạn có thể hiểu sai và đó là điểm mạnh.

Để đáp lại những người khẳng định rằng WCF thay thế ASMX, tôi sẽ trả lời rằng WCF sẽ cần thêm chế độ cấu hình KISS hợp lý để thay thế hoàn toàn ASMX.

Ví dụ web.config cho dịch vụ web ASMX:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>

Tôi không nghĩ WCF cần cấu hình nhiều hơn cho công việc có thể được thực hiện bằng cách sử dụng dịch vụ web asmx và bạn cũng có thể thêm một tham chiếu ở phía khách hàng của mình cho dịch vụ WCF, WCF mạnh hơn asmx, nó có thể làm gì với asmx không và nó sẽ đơn giản như asmx
Coder1409

9
@ Coder1409 cũng chắc chắn là cấu hình nhiều hơn, bởi vì một số thứ cần phải được cấu hình. Ràng buộc, khám phá, vv Không cần thiết trong asmx. Hợp đồng dịch vụ, hợp đồng vận hành, hợp đồng dữ liệu, thành viên dữ liệu. Không cần thiết trong asmx. Tất nhiên những điều này là lý do tại sao wcf vượt trội và mạnh mẽ hơn, nhưng để phủ nhận rằng nó làm tăng thêm sự phức tạp chỉ là không trung thực. Nó đạt được để nói rằng không có nhược điểm.
Andrew Hoffman

7
Lần đầu tiên (thứ hai, thứ ba ...) tôi đã tạo ra một wcf, tôi mất nhiều thời gian để tìm ra cấu hình cần thiết. "Tại sao tôi cần phải làm điều đó?" Tôi cứ tự hỏi. "Tại sao phải bận tâm với một cái gì đó quá phức tạp?". asmx chỉ hoạt động ngay lập tức. Vì vậy, nói rằng nó chỉ đơn giản là không đúng. Một ngày nào đó tôi sẽ hoàn toàn hiểu và thay đổi quan điểm của mình - cho đến ngày đó GRRRR !!!
tomjm

1
@tomjm Một lần nữa, hãy thử nó với phiên bản hiện đại của Visual Studio và .NET. Trong số những thứ khác, hệ thống cấu hình đã thay đổi thành mặc định nhiều cài đặt hơn. Cụ thể, bạn sẽ hầu như không cần phải làm nhiều hơn là chỉ định URL để có được một dịch vụ web đơn giản, chỉ http, không có tính năng.
John Saunders

1
@tomjm Vâng thật tốt khi biết điều đó. Thành thật mà nói, nó được sử dụng rất nhiều cấu hình đến nỗi nó có ý nghĩa để sử dụng một ứng dụng quản lý cấu hình wcf. Nó có thể làm mọi thứ! (ngoại trừ công việc ra khỏi hộp với một số cài đặt mặc định tốt) Tuy nhiên ngày nay chúng tôi nghĩ đơn giản hơn về các dịch vụ WEB. Wcf vẫn tuyệt vời cho dịch vụ nâng cao, nhưng .. có lẽ phần lớn phát triển dịch vụ là phát triển dịch vụ web và thật khó để đánh bại webapi2 để phát triển dịch vụ webs imo.
Andrew Hoffman

10

WCF thay thế hoàn toàn các dịch vụ web ASMX. ASMX là cách cũ để làm dịch vụ web và WCF là cách hiện tại để làm dịch vụ web. Tất cả sự phát triển dịch vụ web SOAP mới, trên máy khách hoặc máy chủ, nên được thực hiện bằng WCF.


32
Vấn đề là, trong khi ASMX là một mô hình đơn giản (có nghĩa là không linh hoạt khủng khiếp), thì đó là một mô hình đơn giản (có nghĩa là dễ sử dụng và hiểu cho các nhu cầu dịch vụ web phổ biến nhất). WCF thêm rất nhiều phức tạp thêm. Mặc dù MS muốn thay thế ASMX bằng WCF, nhưng dường như có một chút chống lại nó cho đến khi MS thực hiện các tình huống phổ biến nhất đơn giản như cách [Webmethod] cũ.
mattmc3

6
WCF hoàn toàn không phức tạp. Tạo một dịch vụ web "hello world" đơn giản trong cả hai và xem bạn viết bao nhiêu mã trong mỗi. Câu trả lời: không nhiều trong một trong hai, và chỉ nhiều hơn một chút trong WCF. Và, BTW, ASMX đã đã được thay thế bằng WCF. Thỏa thuận được thực hiện.
John Saunders

58
"WCF hoàn toàn không phức tạp" Hà. Nói điều đó theo cách của tôi overbloated web.config.
mattmc3

26
(Không phải là một downvoter, nhưng tôi sẽ cho bạn biết lý do tại sao) - bởi vì "cái này mới và cái cũ" không phải là một sự khác biệt đáng kể mà bất cứ ai cũng nên quan tâm. Chúng tôi không chọn các công cụ chỉ dựa trên tuổi của chúng - búa thực sự, thực sự cũ, nhưng nó vẫn là công cụ tốt nhất để lái xe trong hầu hết thời gian. Vì vậy, bạn đã đưa ra một câu trả lời hợp lệ, nó không hữu ích lắm - như trò đùa "bạn đang ở trên máy bay" cũ.
nhài

5
bỏ phiếu - không tham khảo. Làm thế nào để bạn biết thông tin này? Có phải ý kiến ​​không? Bạn có làm việc cho microsoft không? Thêm một tài liệu tham khảo và tôi sẽ bỏ phiếu.
tomjm

7

Có rất nhiều cuộc thảo luận về sự đơn giản của các dịch vụ web asmx so với WCF. Hãy để tôi làm rõ vài điểm ở đây.

  • Đúng là các nhà phát triển dịch vụ web mới làm quen sẽ bắt đầu dễ dàng trong các dịch vụ web asmx. Visual Studio thực hiện tất cả công việc cho họ và sẵn sàng tạo một dự án Hello World.
  • Nhưng nếu bạn có thể học WCF (khóa học này sẽ không mất nhiều thời gian) thì bạn có thể thấy rằng WCF cũng khá đơn giản và bạn có thể đi tiếp dễ dàng.
  • Điều quan trọng cần nhớ là những sự phức tạp nói trên trong WCF thực sự được quy cho các tính năng đẹp mà nó mang lại cùng với nó. Có địa chỉ, ràng buộc, hợp đồng và thiết bị đầu cuối, dịch vụ và khách hàng đều được đề cập trong tệp cấu hình. Vẻ đẹp là logic kinh doanh của bạn được tách biệt và duy trì một cách an toàn. Ngày mai nếu bạn cần thay đổi liên kết từ basicHttpBinding sang netTcpBinding bạn có thể dễ dàng tạo một liên kết trong tệp cấu hình và sử dụng nó. Vì vậy, tất cả các thay đổi liên quan đến máy khách, kênh liên lạc, liên kết, v.v ... sẽ được thực hiện trong cấu hình để logic kinh doanh an toàn & nguyên vẹn, điều này thực sự có ý nghĩa tốt.
  • WCF "dịch vụ web" là một phần của phổ rộng hơn nhiều về giao tiếp từ xa được kích hoạt thông qua WCF. Bạn sẽ có được mức độ linh hoạt và tính di động cao hơn nhiều khi thực hiện mọi thứ trong WCF so với ASMX truyền thống vì WCF được thiết kế, từ đầu, để tóm tắt tất cả các cơ sở hạ tầng lập trình phân tán khác nhau do Microsoft cung cấp. Một điểm cuối trong WCF có thể được truyền thông dễ dàng qua SOAP / XML vì nó có thể qua TCP / nhị phân và để thay đổi phương tiện này chỉ đơn giản là một mod tệp cấu hình. Về lý thuyết, điều này làm giảm số lượng mã mới cần thiết khi chuyển hoặc thay đổi nhu cầu, mục tiêu kinh doanh, v.v.
  • Dịch vụ web chỉ có thể được truy cập qua HTTP và nó hoạt động trong môi trường không trạng thái, trong đó WCF linh hoạt vì các dịch vụ của nó có thể được lưu trữ trong các loại ứng dụng khác nhau. Bạn có thể lưu trữ các dịch vụ WCF của mình trong Bảng điều khiển, Dịch vụ Windows, IIS & WAS, một lần nữa là các cách khác nhau để tạo dự án mới trong Visual Studio.
  • ASMX cũ hơn WCF, và bất cứ điều gì ASMX có thể làm như vậy cũng có thể WCF (và hơn thế nữa). Về cơ bản, bạn có thể thấy WCF khi cố gắng hợp lý nhóm tất cả các cách khác nhau để có được hai ứng dụng giao tiếp trong thế giới của Microsoft; ASMX chỉ là một trong nhiều cách này và vì vậy hiện được nhóm lại dưới khả năng của WCF.
  • Bạn sẽ luôn thích sử dụng Visual Studio cho NET 4.0 hoặc 4.5 vì nó giúp cuộc sống dễ dàng hơn trong khi tạo các dịch vụ WCF.
  • Sự khác biệt chính là Dịch vụ web sử dụng XmlSerializer. Nhưng WCF sử dụng DataContractSerializer, hiệu năng tốt hơn so với XmlSerializer. Đó là lý do tại sao WCF hoạt động tốt hơn so với các đối tác công nghệ truyền thông khác từ .NET như asmx, .NET từ xa, v.v.

Đừng quên rằng tôi là một trong những người thích dịch vụ asmx hơn WCF, nhưng lúc đó tôi không nhận thức rõ về dịch vụ WCF và khả năng của nó. Tôi đã sợ cấu hình WCF. Nhưng tôi đã dám và thử viết vài dịch vụ WCF của riêng mình và khi tôi biết thêm về WCF, bây giờ tôi không có sự ức chế nào về WCF và tôi giới thiệu chúng cho bất kỳ ai và mọi người. Chúc mừng mã hóa !!!

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.