Cách sử dụng tệp WSDL để tạo dịch vụ WCF (không phải thực hiện cuộc gọi)


100

Tôi có một tệp WSDL cũ và tôi muốn tạo một máy chủ dựa trên tệp WSDL này.

WSDL được tạo từ ASMX (tôi cho là vậy nhưng tôi không chắc).

Làm thế nào tôi có thể đạt được điều này ?


câu hỏi ban đầu mà OP nghĩ rằng anh ta cần tạo một ứng dụng khách dựa trên WSDL.

Câu trả lời:


112

Sử dụng svcutil, bạn có thể tạo giao diện và lớp (hợp đồng dữ liệu) từ WSDL.

svcutil your.wsdl (or svcutil your.wsdl /l:vb if you want Visual Basic)

Thao tác này sẽ tạo một tệp có tên "your.cs" trong C # (hoặc "your.vb" trong VB.NET) chứa tất cả các mục cần thiết.

Bây giờ, bạn cần tạo một lớp "MyService" sẽ triển khai giao diện dịch vụ (IServiceInterface) - hoặc một số giao diện dịch vụ - và đây là phiên bản máy chủ của bạn.

Bây giờ bản thân một lớp vẫn chưa thực sự hữu ích - bạn sẽ cần lưu trữ dịch vụ ở một nơi nào đó. Bạn cần tạo phiên bản ServiceHost của riêng mình để lưu trữ dịch vụ, cấu hình điểm cuối, v.v. - hoặc bạn có thể lưu trữ dịch vụ của mình bên trong IIS.


Tôi đã thử tương tự với svcutil, nhưng không thực sự thành công với lỗi. Bạn có thể có một số đề xuất cho vấn đề của tôi không: goo.gl/dlen
Juri

15
"svcutil your.wsdl your.xsd" là những gì tôi cần để làm việc! cảm ơn!
Tim Lewis

3
Hãy xem câu trả lời SO này để biết thông tin về cách tải xuống wsdl và xsd ở định dạng mà svcutil sẽ thích. stackoverflow.com/questions/286657/…
Brett Widmeier

@marc_s Khi tôi sử dụng điều này với tệp WSDL của mình, nó dường như đổi tên một số phần tử theo một cách rất lạ, như vậy các yêu cầu đến máy chủ của tôi thậm chí sẽ không được chấp nhận. Điều này có bình thường không?
Arj

@Arjun: không - điều này có vẻ như bạn cần phải tổng hợp tất cả các dữ kiện có liên quan và đặt câu hỏi trên Stackoverflow! :-)
marc_s

41

Có rất nhiều nguồn tốt nếu bạn biết những gì để tìm kiếm. Hãy thử "Contract First" và WCF. hoặc "WSDL First" và WCF.

Đây là một lựa chọn:


3
Đối với bất kỳ ai theo dõi Tổng quan cơ bản về WSDL- Bài viết đầu tiên : Hãy ghi lại nhận xét nói về ReplyAction="*". Có vẻ như bạn cần phải loại bỏ điều đó. Có một dấu vết giải thích từ nhận xét đó đưa ra lý do, nhưng tôi chưa đọc nó.
dan-gph

30

Sử dụng svcutil.exe với công /sctắc để tạo các hợp đồng WCF. Thao tác này sẽ tạo một tệp mã mà bạn có thể thêm vào dự án của mình. Nó sẽ chứa tất cả các giao diện và kiểu dữ liệu bạn cần để tạo dịch vụ của mình. Thay đổi vị trí đầu ra bằng cách sử dụng công /otắc hoặc bạn có thể tìm thấy tệp trong thư mục mà bạn đã chạy svcutil.exe. Ngôn ngữ mặc định là C # nhưng tôi nghĩ (tôi chưa bao giờ thử) bạn có thể thay đổi ngôn ngữ này bằng cách sử dụng /l:vb.

svcutil /sc "WSDL file path"

Nếu WSDL của bạn có bất kỳ tệp XSD hỗ trợ nào, hãy chuyển những tệp đó làm đối số sau WSDL.

svcutil /sc "WSDL file path" "XSD 1 file path" "XSD 2 file path" ... "XSD n file path"

Sau đó, tạo một lớp mới là dịch vụ của bạn và triển khai giao diện hợp đồng mà bạn vừa tạo.



7

Bạn có thể sử dụng svcutil.exe để tạo mã khách hàng. Điều này sẽ bao gồm định nghĩa của hợp đồng dịch vụ và bất kỳ hợp đồng dữ liệu và hợp đồng lỗi nào được yêu cầu.

Sau đó, chỉ cần xóa mã máy khách: các lớp thực hiện các hợp đồng dịch vụ. Sau đó, bạn sẽ cần phải tự triển khai chúng trong dịch vụ của mình.


4

Sử dụng công cụ "Thêm tham chiếu dịch vụ" trong Visual Studio, bạn có thể chèn địa chỉ dưới dạng:

tệp: ///path/to/wsdl/file.wsdl

Và nó sẽ tải đúng cách.

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.