2009-03-26 36 views
5

Tôi vẫn đang học toàn bộ điều WCF, vì vậy hãy chịu với tôi ở đây.Làm thế nào để tiêu thụ nhiều dịch vụ WCF từ một khách hàng

Điều tôi có là hai dịch vụ tự lưu trữ được tạo bằng C# và VS 2008:
Dịch vụ số 1 Thêm hai số và trả về kết quả.
Dịch vụ số 2 Trả về bình phương của một số.

Tôi muốn khách hàng có thể gửi hai số điện thoại cho Dịch vụ 1, nhận tổng và sau đó gửi số tiền vào Dịch vụ 2 và lấy hình vuông.

Tôi có hai proxy được tạo cho cả hai dịch vụ và tôi có thể sử dụng Intellisense trên chúng, do đó phần đó được cho là hoạt động.

Làm cách nào để tôi định cấu hình tệp app.config của mình để tôi có thể giao tiếp với cả hai dịch vụ? Ngay bây giờ, tôi nhận được một ngoại lệ mỗi khi tôi cố gắng làm điều đó.

[Khách hàng hoạt động tốt nếu tôi chỉ có một trong các cấu hình trong file ứng dụng cùng một lúc, và cố gắng gọi chỉ máy chủ đó.]

Tôi cho rằng đây là một câu hỏi rất noobish, và câu trả lời có lẽ là "cấu trúc tập tin cấu hình theo cách _____", nhưng Google đơn giản dường như không có một ví dụ/hướng dẫn.

Bất kỳ ai biết cách thực hiện việc này?

Lưu ý: Consume multiple WCF services from one client khách hàng Mặc dù âm thanh giống như bản sao không phải là những gì tôi đang tìm kiếm.

Edit: Nhờ marc_s, tôi nhận nó làm việc

Đối với cả hai dịch vụ đang chạy trong các ứng dụng khác nhau, tôi không cần phải tách các máy chủ tập tin cấu hình, nhưng đây là những gì tôi đã làm với các cấu hình client file: Đầu tiên tự động tạo ra các tập tin cấu hình sử dụng SvrUtil.exe và sau đó sáp nhập chúng theo cách này:

<bindings> 
    <wsHttpBinding> 

    <binding> 
    ... 
    </binding> 

    <binding> 
    ... 
    </binding> 

    </wsHttpBinding> 
</bindings> 

...

<endpoint> 

...

+0

+1 - đã bỏ phiếu để làm phiền bạn từ 1,999 đến 2K đại diện để bây giờ bạn có thể CHỈNH SỬA câu trả lời của người khác! woot! –

+0

@Jeremy: Haha cảm ơn! Nó không thể tin được bao lâu nó đã bị mắc kẹt vào năm 1999. – Mostlyharmless

Trả lời

3

Nếu bạn muốn chạy hai dịch vụ trên thiết bị đầu cuối riêng biệt/cảng, làm một cái gì đó như thế này:

Server-side:

<service name="Service1"> 
    <endpoint address="http://localhost:8001/service1.asmx" 
      binding="basicHttpBinding" 
      contract="IService1" /> 
</service> 
<service name="Service2"> 
    <endpoint address="http://localhost:8002/service2.asmx" 
      binding="basicHttpBinding" 
      contract="IService2" /> 
</service> 

Client-side:

<client> 
    <endpoint address="http://localhost:8001/service1.asmx" 
      binding="basicHttpBinding" 
      contract="IService1" 
      name="Service1" /> 
    <endpoint address="http://localhost:8002/service2.asmx" 
      binding="basicHttpBinding" 
      contract="IService2" 
      name="Service2" /> 
</client> 

Điều đó nên cung cấp cho bạn hai điểm cuối riêng biệt trên máy chủ và ứng dụng khách sẽ nói chuyện với cả hai.

Marc

+0

Cảm ơn, đã hoạt động! Có rất nhiều hoán vị để hợp nhất các tập tin cấu hình, mà tôi đã quyết định hỏi, thay vì bao gồm tất cả các hoán vị: P – Mostlyharmless

0

Bạn chỉ có một cuộc đụng độ của các điểm cuối? Hãy chắc chắn rằng cả hai dịch vụ không được cấu hình để nghe trên cùng một số cổng chẳng hạn. Nếu bạn có thể đăng tập tin cấu hình của bạn (hoặc một phiên bản đã được vệ sinh của nó) sẽ giúp ích cho bạn.

+0

Tôi có cả hai đều chạy trên cùng một cổng, nhưng tôi có thể gọi dịch vụ A từ Dịch vụ B, cả nghe cổng 8000. Giả sử tôi chạy chúng trên các cổng khác nhau, làm thế nào để tôi cấu trúc app.config? – Mostlyharmless

+0

Trong bạn có nhiều thành phần , v.v. Bạn không thể chỉ sao chép cả hai phần cấu hình hoàn chỉnh, bạn phải hợp nhất chúng. –

3

Tôi nhận thấy bạn đã yêu cầu câu trả lời cho App.Config nhưng hình này có thể hữu ích. Tôi thường sẽ bắt đầu bằng cách cấu hình các kết nối máy khách theo chương trình trước, vì nó đơn giản hơn, và một khi bạn đã làm việc đó, bạn có thể di chuyển nó đến App.Config của bạn.

Đây là một ví dụ về cách định cấu hình ứng dụng khách WCF.

BasicHttpBinding binding = new BasicHttpBinding(); 
EndpointAddress address = new EndpointAddress(serverURL); 
MyServiceClient myServiceProxy = new MyServiceClient(binding, address); 

Sau đó, bạn có thể có thông tin như bên dưới trong App.Config.

<client> 
    <endpoint address="http://localhost/service1.asmx" 
      binding="basicHttpBinding" 
      bindingConfiguration="basicHttpBinding" 
      contract="IService1" 
      name="Service1" /> 
    <endpoint address="http://localhost/service2.asmx" 
      binding="basicHttpBinding" 
      bindingConfiguration="basicHttpBinding" 
      contract="IService2" 
      name="Service2" /> 
</client> 
Các vấn đề liên quan