WCF có nâng cao thanh hay chỉ mức độ phức tạp? [đóng cửa]


84

Tôi hiểu giá trị của mô hình dịch vụ / máy chủ / máy khách gồm ba phần do WCF cung cấp. Nhưng có phải chỉ tôi hay không hay có vẻ như WCF đã lấy một thứ gì đó khá trực tiếp và đơn giản (mô hình ASMX) và làm cho nó trở nên lộn xộn?

Có cách nào thay thế cho việc sử dụng bước dòng lệnh của SvcUtil quay ngược thời gian để tạo proxy không? Với các dịch vụ ASMX, một bộ khai thác thử nghiệm đã được cung cấp tự động; ngày nay có một giải pháp thay thế tốt với WCF không?

Tôi đánh giá cao rằng công cụ WS * được tích hợp chặt chẽ hơn với WCF và hy vọng sẽ tìm được phần thưởng cho WCF ở đó, nhưng geeze, nếu không thì tôi thấy bối rối.

Ngoài ra, tình trạng sách có sẵn cho WCF là tốt nhất. Juval Lowy, một tác giả xuất sắc, đã viết một cuốn sách tham khảo O'Reilly tốt "Lập trình các dịch vụ WCF" nhưng nó không làm được nhiều điều đó (đối với tôi) để học cách sử dụng WCF ngay bây giờ. Tiền thân của cuốn sách đó (và được tổ chức tốt hơn một chút, nhưng không nhiều, như một hướng dẫn) là Học tập WCF của Michele Leroux Bustamante. Nó có những điểm tốt nhưng đã lỗi thời và trang Web tương ứng của nó đã biến mất.

Bạn có tài liệu tham khảo tốt nào về việc học WCF ngoài việc tiếp tục sử dụng Google bejebus không?


3
Nếu bạn đang tìm kiếm ứng dụng khách thử nghiệm tốt cho các dịch vụ WCF. Lựa chọn nào tốt hơn msdn.microsoft.com/en-us/library/bb552364.aspx
Strelok

Câu trả lời:


61

Được rồi, chúng ta bắt đầu. Đầu tiên, cuốn sách của Michele Leroux Bustamante đã được cập nhật cho VS2008. Trang web cho cuốn sách vẫn chưa biến mất. Nó đã cập nhật ngay và có rất nhiều thông tin WCF tuyệt vời. Trên trang web đó, cô ấy cung cấp mã cập nhật tương thích với VS2008 cho tất cả các ví dụ trong sách của mình. Nếu bạn đặt hàng từ Amazon, bạn sẽ nhận được bản in lại được cập nhật.

WCF không chỉ là sự thay thế cho ASMX. Chắc chắn nó có thể (và hoạt động khá tốt) thay thế ASMX, nhưng lợi ích thực sự là nó cho phép các dịch vụ của bạn tự lưu trữ. Hầu hết các chức năng từ WSE đã được tích hợp ngay từ đầu. Khung công tác có thể cấu hình cao và khả năng phục vụ nhiều điểm cuối qua nhiều giao thức thật tuyệt vời, IMO.

Mặc dù bạn vẫn có thể tạo các lớp proxy từ tùy chọn "Thêm Tham chiếu Dịch vụ", nhưng điều này không cần thiết. Tất cả những gì bạn thực sự phải làm là sao chép giao diện ServiceContract của mình và cho mã của bạn biết nơi tìm điểm cuối cho dịch vụ, và thế là xong. Bạn có thể gọi các phương thức từ dịch vụ với rất ít mã. Sử dụng phương pháp này, bạn có toàn quyền kiểm soát việc thực hiện. Bất kể phương pháp bạn chọn để tạo lớp proxy là gì, Michele hiển thị cả hai và sử dụng cả hai trong loạt webcast tuyệt vời của cô ấy về chủ đề này.

Michele có rất nhiều tài liệu hay và tôi khuyên bạn nên xem (các) trang web của cô ấy. Đây là một số liên kết vô cùng hữu ích cho tôi khi tôi đang học WCF. Tôi hy vọng rằng bạn sẽ nhận ra WCF thực sự mạnh như thế nào và nó dễ thực hiện như thế nào. Đường cong học tập hơi dốc một chút, nhưng phần thưởng cho sự đầu tư thời gian của bạn rất xứng đáng:

Tôi khuyên bạn nên xem ít nhất 1 trong số các webcast của Michele. Cô ấy là một người thuyết trình rất hiệu quả và rõ ràng là cô ấy cực kỳ hiểu biết khi nói đến WCF. Cô ấy đã làm rất tốt trong việc làm sáng tỏ hoạt động bên trong của WCF từ đầu.


3
Tài nguyên tuyệt vời. Tôi sẽ không đi xa khi nói rằng rp đang đánh bại WCF hoặc các tác giả. Tôi cũng cảm thấy hơi choáng ngợp khi cố gắng xem WCF sau khi đã dành rất nhiều thời gian cho ASMX. Tôi biết nó tốt hơn và tôi muốn trải nghiệm nó, nhưng thật khó để tìm thấy một điểm vào giống như bạn có thể làm với ASMX.
Chris Stewart,

15

Tôi thường sử dụng Google để tìm câu trả lời WCF của mình và thường thấy mình trên các blog sau:

Blog có các bài viết WCF có giá trị

Các bài báo giá trị khác mà tôi đã tìm thấy


Cảm ơn vì các liên kết. Chỉ tò mò thôi, bạn có biết chuyện gì đã xảy ra với phật tử? Anh ta dường như đã biến mất khỏi mặt đất. Blog mới mà anh ấy đề cập tại blog.thinktecture.com/buddhike không tồn tại (nữa). Nó giống như anh ta xáo trộn cuộn dây chết chóc này. (Những giấc mơ có thể đến?) Cảm ơn.
Jim Raden 02/09/09


14

Tôi đang gặp khó khăn để biết khi nào tôi nên hoặc sẽ sử dụng WCF. Tại sao? Bởi vì tôi đặt năng suất và sự đơn giản lên hàng đầu. Tại sao mô hình ASMX lại thành công như vậy, bởi vì nó hoạt động và bạn làm cho nó hoạt động nhanh chóng. Và với VS 2005 và .NET 2.0 wsdl.exe đã tạo ra các dịch vụ khá tốt và tuân thủ.

Trong cuộc sống thực, bạn nên có rất ít giao thức giao tiếp trong kiến ​​trúc của mình. Điều này giúp nó đơn giản dễ bảo trì. Nếu bạn cần gia nhập các hệ thống cũ, hãy viết các bộ điều hợp cụ thể cho chúng để chúng có thể chơi cùng trong thế giới SOA sáng bóng và đẹp đẽ.


WCF nhằm mục đích trở thành một khuôn khổ duy nhất cho tất cả các giao thức đó. Nó thực hiện SOAP, REST và với SDK tiếp hợp WSCF, nó cũng thực hiện các kết nối "hệ thống kế thừa" đó, tất cả đều nằm trong mô hình WCF.
Cheeso

3
Nó phụ thuộc vào cách bạn đo lường "năng suất". Tôi thà rằng một nhà phát triển mất 2 - 3 ngày để giải quyết vấn đề này ngay bây giờ, vì những lợi ích nói trong thời gian 6 tháng. WCF thay thế nhiều hơn các dịch vụ web.
Christian Payne

1
Tôi đồng ý 100%. Nếu bạn chỉ muốn có Dịch vụ Web và bạn cần giao hàng nhanh chóng (ai không?), ASMX của nó luôn sẵn sàng! WCF là một cái búa tạ khổng lồ - tổng số quá mức cần thiết nếu tất cả những gì bạn muốn là Dịch vụ Web cơ bản. Chỉ vì điều mới sáng bóng của nó không có nghĩa là bạn nên cho rằng nó tốt hơn tất cả, cho mọi tình huống, mọi lúc. Và chỉ vì WCF khó hiểu, không khiến bạn trở thành người thông minh khi lựa chọn nó. Thêm sức mạnh cho những người có can đảm từ chối để nhảy vào nhóm WCF!
saille

13

WCF mạnh hơn nhiều so với ASMX và nó mở rộng nó theo một số cách. ASMX bị giới hạn ở chỉ HTTP, trong khi WCF có thể sử dụng một số giao thức để giao tiếp (được cấp phép, HTTP vẫn là cách mà hầu hết mọi người sẽ sử dụng nó, ít nhất là đối với các dịch vụ cần tương tác). WCF cũng dễ dàng mở rộng hơn. Ít nhất, có thể mở rộng nó theo những cách mà ASMX không thể mở rộng. "Dễ dàng" có thể là kéo dài nó. =)

Theo ý kiến ​​của tôi, chức năng bổ sung được WCF cung cấp vượt xa sự phức tạp mà nó thêm vào. Tôi cũng cảm thấy rằng mô hình lập trình dễ dàng hơn. DataContracts đẹp hơn nhiều so với việc phải tuần tự hóa bằng cách sử dụng tuần tự hóa XML với các thuộc tính công khai cho mọi thứ, chẳng hạn. Nó cũng mang tính chất khai báo nhiều hơn, điều này cũng rất hay.


6

Chờ đã .... bạn đã bao giờ sử dụng .NET Remoting chưa, vì đó là thứ thực sự thay thế nó. .NET Remoting chính nó khá phức tạp. Tôi thấy WCF dễ dàng hơn và bố trí tốt hơn.


4

Tôi không thấy nó được đề cập thường xuyên, nhưng bạn vẫn có thể triển khai các dịch vụ khá đơn giản với WCF, rất giống với các dịch vụ ASMX. Ví dụ:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
    [OperationContract]
    public string HelloWorld()
    {
        return "Hello World";
    }

}

Bạn vẫn phải đăng ký điểm cuối trong web.config của mình, nhưng điều đó không quá tệ.

Việc loại bỏ tính chi tiết của các hợp đồng dữ liệu, dịch vụ và hoạt động được tách biệt là một chặng đường dài giúp tôi quản lý WCF dễ dàng hơn.


AspNetCompatibilityRequirements là một điều ác cần thiết nếu nhiều nhà phát triển định thực hiện chuyển đổi từ các dịch vụ ASMX của họ hiện đang hoạt động tốt.
Dave Ward

@dan tại sao không phải là AspNetCompatibilityRequirements ?
PreguntonCojoneroCabrón

@DaveWard AspNetCompatibilityRequirements là một điều ác cần thiết ?
PreguntonCojoneroCabrón

4

VS2008 bao gồm mục menu ngữ cảnh "Thêm tham chiếu dịch vụ" sẽ tạo proxy cho bạn ở hậu trường.

Như đã đề cập trước đây, WCF không chỉ nhằm mục đích thay thế cho các loại dịch vụ web ASMX, mà để cung cấp một phương pháp luận nhất quán, an toàn và có thể mở rộng cho tất cả các dịch vụ có thể tương tác, cho dù nó qua HTTP, tcp, đường ống được đặt tên hoặc truyền tải MSMQ.

Tôi sẽ thú nhận rằng tôi thực sự có các vấn đề khác với WCF (ví dụ: viết lại chữ ký của phương thức khi hiển thị một dịch vụ qua basicHTTP - xem ở đây , nhưng về tổng thể, tôi nghĩ đó là một sự cải thiện rõ ràng


3

Nếu bạn đang sử dụng VS2008 và tạo một dự án WCF thì bạn sẽ tự động nhận được bộ khai thác thử nghiệm khi bạn nhấn run / debug và bạn có thể thêm tham chiếu mà không cần phải sử dụng svcutil.


2

Suy nghĩ ban đầu của tôi về WCF hoàn toàn giống nhau! Dưới đây là một số giải pháp:

  1. Lập trình proxy / lớp máy khách của riêng bạn bằng cách sử dụng chung (xem các lớp ClientBase , Binding). Tôi thấy điều này dễ dàng để làm việc, nhưng khó hoàn thiện.
  2. Sử dụng cách triển khai bên thứ ba của 1 ( SoftwareIsHardwork là công việc yêu thích hiện tại của tôi)

2

WCF là sự thay thế cho tất cả các dịch vụ web trước đó công nghệ của Microsoft. Nó cũng làm được nhiều hơn những gì truyền thống được coi là "dịch vụ web".

WCF "dịch vụ web" là một phần của phổ rộng hơn nhiều của giao tiếp từ xa được kích hoạt thông qua WCF. Bạn sẽ nhận được mức độ linh hoạt và tính di động cao hơn nhiều khi thực hiện mọi việc trong WCF so với thông qua ASMX truyền thống bởi vì WCF được thiết kế để 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 giao tiếp dễ dàng qua SOAP / XML cũng như nó có thể qua TCP / nhị phân và để thay đổi phương tiện này chỉ cần 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 kinh doanh, mục tiêu, v.v.

ASMX is older than WCF, and anything ASMX can do so can WCF (and more). Về cơ bản, bạn có thể thấy WCF đang cố gắng nhóm lại một cách hợp lý tất cả các cách khác nhau để 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à do đó hiện nay được nhóm lại dưới phạm vi khả năng của WCF.

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, nơi 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. Các kịch bản phổ biến để lưu trữ các dịch vụ WCF là IIS, WAS, Tự lưu trữ, Dịch vụ Windows được quản lý.

Sự khác biệt chính là Dịch vụ Web Sử dụng XmlSerializer. Nhưng WCF sử dụng DataContractSerializer có hiệu suất tốt hơn so với XmlSerializer.

WCF phải được sử dụng trong những trường hợp nào

  • Một dịch vụ an toàn để xử lý các giao dịch kinh doanh. Một dịch vụ mà
  • cung cấp dữ liệu hiện tại cho những người khác, chẳng hạn như báo cáo lưu lượng truy cập hoặc
  • dịch vụ giám sát. Một dịch vụ trò chuyện cho phép hai người
  • giao tiếp hoặc trao đổi dữ liệu trong thời gian thực. Một ứng dụng bảng điều khiển
  • thăm dò ý kiến ​​một hoặc nhiều dịch vụ cho dữ liệu và trình bày nó một cách logic
  • sự trình bày. Hiển thị quy trình làm việc được triển khai bằng Quy trình làm việc của Windows
  • Nền tảng như một dịch vụ WCF. Một ứng dụng Silverlight để thăm dò ý kiến
  • dịch vụ cho các nguồn cấp dữ liệu mới nhất.

Đặc điểm của WCF

  • Định hướng dịch vụ
  • Khả năng tương tác
  • Nhiều mẫu tin nhắn
  • Siêu dữ liệu dịch vụ
  • Hợp đồng dữ liệu
  • Bảo vệ
  • Nhiều phương tiện vận chuyển và mã hóa
  • Tin nhắn đáng tin cậy và được xếp hàng đợi
  • Tin nhắn lâu bền
  • Giao dịch
  • Hỗ trợ AJAX và REST
  • Khả năng mở rộng

nguồn: nguồn chính của văn bản


Bây giờ, sử dụng WCF hay REST? hoặc WebAPI? hoặc MicroService?
PreguntonCojoneroCabrón

1

MSDN? Tôi thường làm khá tốt với tài liệu tham khảo của Thư viện, và tôi thường mong tìm được những bài báo có giá trị ở đó.


1

Về những gì nó cung cấp, tôi nghĩ câu trả lời là khả năng tương thích. Các dịch vụ ASMX khá là Microsofty. Không có nghĩa là họ không cố gắng tương thích với những người tiêu dùng khác; nhưng mô hình này không được tạo ra để phù hợp nhiều ngoài các trang web ASP.NET và một số người tiêu dùng tùy chỉnh khác của Microsoft. Trong khi WCF, do kiến ​​trúc của nó, cho phép dịch vụ của bạn có các điểm cuối dựa trên tiêu chuẩn mở, chẳng hạn như REST, JSON, v.v. ngoài SOAP thông thường. Những người khác có thể sẽ tốn thời gian dễ dàng hơn nhiều so với dịch vụ WCF của bạn so với dịch vụ ASMX của bạn.

(Tất cả điều này về cơ bản được suy ra từ việc đọc MSDN so sánh, vì vậy ai đó biết nhiều hơn hãy vui lòng sửa cho tôi.)


Tôi không gặp khó khăn với các dịch vụ ASMX đa nền tảng - XML ​​hoạt động khá tốt ở đó. Tôi hiểu rằng WCF = remoting + ASMX + MSMQ + WSE. Thịt bò của tôi là MS nên sử dụng một chút "tăng cường lũy ​​tiến" để làm cho WCF dễ dàng tiếp cận hơn và câu hỏi của tôi là làm thế nào! Cảm ơn, rp
rp.

Khả năng tương tác ASMX rất tốt, mặc dù nỗ lực càng cao hơn khi có sự tham gia của WS-Security.
Cheeso

1

WCF không nên được coi là một sự thay thế cho ASMX. Đánh giá vị trí của nó và cách nó được sử dụng trong nội bộ Microsoft, nó thực sự là một phần kiến ​​trúc cơ bản được sử dụng cho bất kỳ loại giao tiếp xuyên biên giới nào.


vâng ... và là một khung truyền thông cơ bản, nó sẽ thay thế các dịch vụ web định hướng ASMX và ASP.NET. Không?
Cheeso

1

Tôi tin rằng WCF thực sự nâng cao việc triển khai các dịch vụ web ASMX theo nhiều cách. Trước hết, nó cung cấp một mô hình đối tượng phân lớp rất đẹp giúp che giấu sự phức tạp nội tại của các ứng dụng phân tán. Thứ hai, bạn có thể có nhiều hơn các mẫu nhắn tin yêu cầu phát lại, bao gồm thông báo không đồng bộ từ máy chủ đến máy khách (không thể xảy ra với HTTP thuần túy) và thứ ba là trừu tượng hóa giao thức truyền tải cơ bản khỏi nhắn tin XML và do đó hỗ trợ HTTP, HTTPS, TCP và các thứ khác một cách trang nhã. Khả năng tương thích ngược với các dịch vụ web "thế hệ 1" cũng là một điểm cộng. WCF sử dụng tiêu chuẩn XML làm định dạng biểu diễn nội bộ. Điều này có thể được coi là lợi thế hoặc bất lợi, đặc biệt là với sự phổ biến ngày càng tăng của "các lựa chọn thay thế không có chất béo cho XML" như JSON.


1

Những điều khó khăn mà tôi tìm thấy với WCF là quản lý cấu hình cho máy khách và máy chủ, đồng thời khắc phục sự cố các ngoại lệ trạng thái bị lỗi không đẹp.

Sẽ thật tuyệt nếu ai đó có bất kỳ phím tắt hoặc mẹo nào cho chúng.


1

Tôi thấy đó là một nỗi đau; trong đó tôi có .NET ở cả hai đầu, có cùng một "hợp đồng" dlls được tải ở cả hai đầu, v.v. Nhưng sau đó tôi phải làm rối với rất nhiều chi tiết như thuộc tính "knownType".

WCF cũng mặc định chỉ cho phép 1 hoặc 2 máy khách kết nối với một dịch vụ cho đến khi bạn thay đổi nhiều cấu hình. Thay đổi cấu hình từ mã không dễ dàng, vận chuyển nhiều tệp comfig không phải là một tùy chọn, vì quá khó để kết hợp các thay đổi của chúng tôi vào bất kỳ thay đổi nào mà khách hàng có thể đã thực hiện tại thời điểm nâng cấp (chúng tôi cũng không muốn khách hàng chơi với cài đặt WCF!)

.NET Remting có xu hướng chỉ hoạt động trong hầu hết thời gian.

Tôi nghĩ rằng cố gắng giả vờ rằng giao tiếp dựa trên đối tượng .NET tới .NET cũng giống như việc gửi bit của Văn bản (xml) tới một hệ thống không xác định, là một bước quá xa.

(Một vài lần chúng tôi sử dụng WCF để nói chuyện với hệ thống Java, chúng tôi nhận thấy rằng XSD mà hệ thống java đưa ra không phù hợp với những gì nó muốn XML, vì vậy phải viết mã thủ công rất nhiều ánh xạ XML.)


Tôi nghĩ mọi người đã hơi lạc quan khi nói rằng WCF là sự thay thế cho sự hối hận. Điều khiển từ xa vẫn là một lựa chọn phù hợp khi bạn muốn thực hiện các cuộc gọi dựa trên đối tượng .Net to .Net thực và có nhiều quyền kiểm soát cách mọi thứ được thiết lập ở cả hai đầu. Mặt khác, WCF hướng đến việc xuất bản Dịch vụ cho mọi người sử dụng, theo bất kỳ cách nào họ muốn.
Tim Lovell-Smith

@Tim, Microsoft hiện cho biết sử dụng WCF cho mọi thứ và nó là sự thay thế cho Remoting. Remoting dường như là đứa con bị lãng quên của thế giới .net.
Ian Ringrose
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.