2012-06-27 54 views
5

Tôi đang viết một ứng dụng khách để truy cập một dịch vụ web SOAP, sẽ được một bên thứ ba lưu trữ. Tôi có WSDL và XSD xác định giao diện và dữ liệu.Triển khai nhanh chóng và dễ dàng dịch vụ web WCF, được cung cấp cho wsdl?

Tôi không gặp sự cố khi tạo tham chiếu dịch vụ từ WSDL, nhưng tôi đang gặp sự cố khi xây dựng một dịch vụ web đơn giản triển khai dịch vụ web mà tôi có thể sử dụng để kiểm tra. (Dịch vụ của bên thứ ba chưa sẵn sàng, nhưng ngay cả khi nó đang chạy, tôi vẫn muốn làm thử nghiệm ban đầu của tôi đối với máy chủ thử nghiệm của riêng tôi, không chống lại máy chủ thử nghiệm của họ.)

Tôi đã duyệt xung quanh và dường như tôi có thể sử dụng svcutil để tạo giao diện cho dịch vụ:

svcutil.exe thewsdl.wsdl thexsd.xsd /language:c# /out:ITestService.cs 

Điều này tạo ra tệp chứa định nghĩa giao diện dịch vụ. Nhưng giờ thì sao?

Tôi đã tìm ra cách dễ nhất để xây dựng dịch vụ tự lưu trữ, vì vậy tôi đã tạo ứng dụng bảng điều khiển mới và trong đó tôi đã triển khai một lớp bắt nguồn từ định nghĩa giao diện dịch vụ và kích hoạt nó bằng ServiceHost .

Chạy và trong khi chạy, tôi có thể tạo Tham chiếu dịch vụ trong ứng dụng khách của mình. Nhưng khi tôi cố gọi nó, từ ứng dụng khách, tôi gặp lỗi:

The provided URI scheme 'http' is invalid; expected 'https'. 

Cách dễ nhất để giải quyết vấn đề này là gì? Có cách nào đơn giản để tắt xác thực và ủy quyền đơn giản và chỉ cho phép truy cập không hạn chế?

CHỈNH SỬA:

Tôi đang thêm tiền thưởng cho điều này, vì câu hỏi ban đầu dường như đã không thu hút sự chú ý.

Nhưng chúng ta hãy đi đến mấu chốt. Tôi đang cố gắng viết một khách hàng chống lại dịch vụ SOAP của khách hàng. Là một phần của sự phát triển, tôi muốn tạo ra dịch vụ WCF thử nghiệm của riêng tôi, thực hiện cùng một WSDL.

Vì vậy, tôi có tệp .wsdl đã tải xuống và tệp .xsd được liên kết và với chúng tôi muốn tạo một dịch vụ mà tôi có thể kiểm tra, với trình gỡ rối của VS2010.

Điều này không quan trọng đối với tôi liệu dịch vụ này có chạy độc lập hay trong IIS hay sản xuất ổn định. Tất cả những gì tôi muốn là một dịch vụ chấp nhận các yêu cầu mà trang web của khách hàng sẽ chấp nhận và trả lại phản hồi cho khách hàng của tôi rằng tôi cần nó để trả lại, để kiểm tra việc xử lý chúng của họ.

Làm cách nào để đến đó? Tôi đã thử thêm một WCF Dịch vụ Thư viện, và sau đó sử dụng svcutil.exe bên trong nó để thêm dịch vụ mới của tôi, nhưng nó dường như không cư trú app.config với boilerplate phía máy chủ, và nỗ lực của tôi để tái tạo lại nó thiên đường 't làm việc.

+0

nhìn cho WCF 101 trên intertubes. Bạn cần chỉ định siêu dữ liệu cấu hình dịch vụ cơ bản. – Cheeso

+0

Bạn sắp hoàn tất. Một nơi nào đó trong app.config của bạn, bạn xác định rằng ssl là bắt buộc. Xuất bản nó ở đây và chúng tôi sẽ giúp bạn tắt nó –

Trả lời

1

Tôi đã sử dụng Moq để xử lý việc này. Về cơ bản trong các bài kiểm tra đơn vị bạn chỉ định giao diện (điều này sẽ được tạo ra cho bạn với việc thêm tham chiếu dịch vụ hoặc sử dụng svcutil) và những gì bạn muốn nó trở lại nếu bạn gọi nó.

dụ thiết lập dưới đây:

var mock = new Mock<IFoo>(); 
mock.Setup(foo => foo.DoSomething("ping")).Returns(true); 

Vì vậy, sau đó khi bạn muốn MOQ ra cuộc gọi dịch vụ của bạn

var myObject = new IFoo; 
var resp = myObject.DoSomething("whateverwillbeoverriddenbyping"); 

và resp sẽ thành sự thật.

Có các tùy chọn khác so với sử dụng Moq. Các tùy chọn liên quan đến việc lấy giao diện và tiêm một phiên bản khác của nó. Ví dụ, bạn cũng có thể thực hiện một mô phỏng tiêm constructor, bằng cách truyền vào giao diện cho hàm tạo lớp của bạn.

+0

+1 cho câu trả lời tuyệt vời này. Sau khi bạn đã nhảy qua tất cả các vòng lặp, những gì WCF sẽ cung cấp cho bạn sẽ là một đối tượng thực hiện giao diện phản ánh WSDL được cung cấp. Bạn không cần tất cả các WCF guff cho mục đích thử nghiệm. Chỉ cần giả lập giao diện và tiếp tục với việc xây dựng ứng dụng khách của bạn. –

+0

Đối với những gì tôi đang làm, tôi cần một dịch vụ WCF thực tế.Có thử nghiệm ngoài thử nghiệm đơn vị, và đối với các thử nghiệm tôi đang chạy, Mocks sẽ không làm. –

+0

Đăng tập tin cấu hình của bạn system.serviceModel phần cho cả dịch vụ và khách hàng. –

5

Vì bạn muốn có dịch vụ chính thức để gọi thay vì chế nhạo.

Thực hiện theo các bước sau:

  1. Tạo mới "Ứng dụng Dịch vụ WCF" Dự án
  2. Sao chép WSDL và XSD vào dự án
  3. chọn file wsdl của bạn và tìm kiếm trong phần tài sản và sao chép vị trí từ đường dẫn đầy đủ
  4. Nhấp chuột phải vào dự án trong trình khám phá giải pháp và chọn "Thêm tham chiếu dịch vụ ..."
  5. Đối với địa chỉ dịch vụ, dán vị trí của wsdl đã được sao chép vào trước đó bước và nhấn đi. Nó sẽ hiển thị các hoạt động bạn đang mong đợi cho dịch vụ.
  6. hit ok
  7. Cần tạo ra tất cả các đối tượng cho bạn bao gồm cả giao diện và cấu hình tập tin (mặc dù vào thời điểm này là phía khách hàng trong config- chúng tôi sẽ phải chuyển này là dịch vụ)
  8. Bây giờ bạn nên thêm phần cấu hình dịch vụ trong phần system.serviceModel. Vì tôi không biết các chi tiết cụ thể của wsdl của bạn nên làm gì đó là tạo nút dịch vụ bên trong phần system.serviceModel và sao chép nút điểm cuối từ nút máy khách được tạo ra. Ví dụ dưới đây của nút dịch vụ, bạn có thể trống ra địa chỉ cho bây giờ:
<system.serviceModel> 
    <services> 
     <service name="YourService"> 
     <endpoint address="" 
       binding="basicHttpBinding" bindingConfiguration="WeatherSoap" 
       contract="ServiceReference1.WeatherSoap" name="WeatherSoap" />  
     </service> 
  1. xóa nút client trong cấu hình
  2. Trong dịch vụ, nó được thực hiện một giao diện khác nhau khi nó được tạo ra dự án, do đó bạn sẽ muốn thay thế giao diện được triển khai bằng giao diện được liệt kê trong thuộc tính hợp đồng trong điểm cuối ở trên. Sau đó, thực hiện các thành viên của nó và nó sẽ nổ ra các hoạt động có sẵn. Bạn có thể điền vào bất cứ điều gì bạn muốn các hoạt động dịch vụ trở lại.
  3. tùy thuộc vào những gì wsdl có trong nó, chúng ta có thể cần phải làm một vài điều hơn để cho phép các ràng buộc cần thiết để chạy - như thiết lập cho wsHttpBinding, netTCPbinding vv
Các vấn đề liên quan