Cách sử dụng WSDL


126

Tôi cần sử dụng một Dịch vụ Web. Họ đã gửi cho tôi tệp WSDL. Tôi nên làm gì để thêm nó vào trang web của mình và bắt đầu sử dụng nó làm proxy. (Nếu tôi đặt nó trên Thư mục ảo, nó có thể được phát hiện, nhưng nó có cấp cho tôi kết nối với dịch vụ web thực không?)


9
Chà, tôi đã ủng hộ vì đó là một câu hỏi mà tôi nghĩ rằng những người dùng khác ở đây sẽ được lợi khi thấy câu trả lời. Tôi đã tìm kiếm vấn đề chính xác này và tôi rất vui khi tìm thấy nó ở đây.
schizoid04 14/09/15

Câu trả lời:


138

Tôi sẽ kích hoạt Visual Studio, tạo một dự án web (hoặc ứng dụng bảng điều khiển - không quan trọng).

Đối với .Net Standard:

  1. Tôi sẽ nhấp chuột phải vào dự án và chọn "Thêm Tham chiếu Dịch vụ" từ menu Thêm ngữ cảnh.
  2. Tôi sẽ nhấp vào Nâng cao, sau đó nhấp vào Thêm Tham chiếu Dịch vụ.
  3. Tôi sẽ nhận được đường dẫn tệp hoàn chỉnh của wsdl và dán vào thanh địa chỉ. Sau đó bắn Mũi tên (nút đi).
  4. Nếu có lỗi khi cố gắng tải tệp, thì phải có một url bị hỏng và chưa được giải quyết mà tệp cần phải giải quyết như được hiển thị bên dưới: nhập mô tả hình ảnh ở đây Tham khảo câu trả lời này để biết thông tin về cách khắc phục: Câu trả lời của Stackoverflow cho: Không thể tạo tham chiếu dịch vụ cho tệp wsdl

Nếu không có lỗi, bạn chỉ cần đặt NameSpace bạn muốn sử dụng để truy cập dịch vụ và nó sẽ được tạo cho bạn.

Đối với .Net Core

  1. Tôi sẽ nhấp chuột phải vào dự án và chọn Dịch vụ được Kết nối từ menu Thêm ngữ cảnh.
  2. Tôi sẽ chọn Nhà cung cấp Tham chiếu Dịch vụ Web Microsoft WCF từ danh sách.
  3. Tôi sẽ nhấn duyệt và chọn tệp wsdl ngay lập tức, Đặt không gian tên và tôi đã sẵn sàng. Tham khảo phần sửa lỗi url ở trên nếu bạn gặp bất kỳ lỗi nào.

Bất kỳ phương pháp nào ở trên sẽ tạo một ứng dụng khách WCF đơn giản, rất cơ bản để bạn sử dụng. Bạn sẽ tìm thấy một lớp "YourservicenameClient" trong mã đã tạo.

Với mục đích tham khảo, tệp cs được tạo có thể được tìm thấy trong obj / debug (hoặc release) / XsdGeneratedCode của bạn và bạn vẫn có thể tìm thấy các dlls trong thư mục TempPE.

(Các) Dịch vụ được tạo phải có các phương thức cho từng phương thức được xác định trên hợp đồng WSDL.

Khởi tạo ứng dụng khách và gọi các phương thức bạn muốn gọi - đó là tất cả!

YourServiceClient client = new YourServiceClient();
client.SayHello("World!");

Nếu bạn cần chỉ định URL từ xa (không sử dụng URL được tạo theo mặc định), bạn có thể dễ dàng thực hiện việc này trong hàm tạo của máy khách proxy:

YourServiceClient client = new YourServiceClient("configName", "remoteURL");

đâu configNamelà tên của điểm cuối cần sử dụng (bạn sẽ sử dụng tất cả các cài đặt ngoại trừ URL) và remoteURLlà một chuỗi đại diện cho URL để kết nối (thay vì chuỗi có trong cấu hình).


Điều này hoạt động tốt. Chỉ có một câu hỏi, nếu tôi có tệp wsdl trên máy của mình và tôi thêm tham chiếu vào tệp này. Khi thực thi Url mà nó truy cập là URL lưu trữ dịch vụ web hay tôi phải xác định cụ thể Binding và EndPoint?
jmayor

1
Điều đó tùy thuộc vào bạn - theo mặc định, mã được tạo cho proxy máy khách sẽ có URL chứa bên trong WSDL - nếu bạn cần truy cập vào URL khác, bạn cần phải tự chỉ định.
marc_s

Tại sao điều này lại dễ dàng như vậy? Không có một bắt? : p Cảm ơn!
Odys

1
Như câu trả lời được chấp nhận, sẽ rất tốt nếu bạn cũng đề cập đến cách sử dụng WSDL được lưu trữ trên web từ một URL.
Caltor

Tôi nghĩ rằng tôi đã khá gần với việc này. Tôi đã cài đặt Dịch vụ Web bằng công cụ Thêm tham chiếu dịch vụ. Tôi có thể Khởi tạo ứng dụng khách, nhưng việc gọi các phương thức là nơi tôi thất bại. Điểm cuối cùng là sử dụng một triển khai Java và tất cả những gì tôi có thể thấy là XML. Phương pháp tôi đang cố gắng gọi là tìm kiếm một clientid và "một cái gì đó khác". Đó là một cái gì đó khác là một lớp. Thật là khó hiểu. Tôi có thể đặt điều này trong một bài đăng dưới đây nếu điều đó sẽ hữu ích, nhưng tôi cảm thấy bối rối.
mappingman

45

Trong studio trực quan.

  • Tạo hoặc mở một dự án.
  • Nhấp chuột phải vào dự án từ trình khám phá giải pháp.
  • Chọn "Thêm giới thiệu dịch vụ"
  • Dán địa chỉ với WSDL bạn nhận được.
  • Bấm OK.

Nếu không có lỗi, bạn sẽ có thể xem tham chiếu dịch vụ trong trình duyệt đối tượng và tất cả các phương pháp liên quan.


9
<3 Visual Studio .. Vâng, nó thực sự đơn giản :)
cwap

3
OP không có địa chỉ mà là một tệp.
Henk Holterman

1
Nhà cung cấp dịch vụ Web có thể đã vô hiệu hóa WSDL (bảo mật bằng cách che khuất), vì vậy không có URL nào mà WSDL có thể được truy cập và sau đó thêm tham chiếu Web trong VS sẽ không hoạt động. Tuy nhiên, nhà cung cấp muốn BẠN (ý tôi là OP) biết tất cả những gì bạn cần biết về hợp đồng dịch vụ, đó là lý do tại sao họ gửi tệp WSDL. Bây giờ OP cần tạo mã proxy từ nó, câu hỏi là làm thế nào.
azheglov

3
Bằng cách gõ vào đường dẫn đến tệp. Điều gì khiến bạn nghĩ rằng điều đó không hiệu quả?
John Saunders

1
Xin chào @vidalsasoon. Bạn có thể giải thích ngắn gọn cách sử dụng các lớp này mà tôi thấy trong trình khám phá lớp của mình không. ?
CalZone

16

Sử dụng tiện ích WSDL.EXE để tạo proxy Dịch vụ Web từ WSDL.

Bạn sẽ nhận được một tệp nguồn C # dài có chứa một lớp trông giống như sau:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MyService", Namespace="http://myservice.com/myservice")]
public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol {
    ...
}

Trong mã sử dụng dịch vụ Web, phía máy khách của bạn:

  1. khởi tạo MyService.
  2. đặt thuộc tính Url của nó
  3. gọi các phương thức Web

5
Điều này tạo ra một "kiểu cũ" ASMX Webservice - đó là những lỗi thời - ta nên sử dụng WCF thay vì ngày nay
marc_s

7

Nếu bạn muốn thêm tham chiếu wsdl trong dự án .Net Core , không có tùy chọn "Thêm tham chiếu web".

Để thêm tham chiếu wsdl, hãy vào Solution Explorer, nhấp chuột phải vào mục dự án References và sau đó nhấp vào tùy chọn Add Connected Service .

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

Sau đó nhấp vào 'Microsoft WCF Web Service Reference':

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

Nhập đường dẫn tệp vào hộp văn bản URI và nhập WSDL:

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

Nó sẽ tạo một ứng dụng khách WCF đơn giản, rất cơ bản và bạn có thể sử dụng nó như sau:

YourServiceClient client = new YourServiceClient();
client.DoSomething();

Phần mở rộng này không xuất hiện với tôi.
Rafael Pizao
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.