2009-04-06 65 views

Trả lời

50

Trước tiên, bạn cần phải rõ ràng dịch vụ là gì. Bạn có nghĩa là một điểm cuối duy nhất, hoặc nhiều thiết bị đầu cuối trong cùng một máy chủ?

Giả sử bạn có nghĩa là một điểm cuối duy nhất, sau đó có, nhưng với một ít công việc. Điểm cuối chỉ có thể thực hiện một giao diện duy nhất; vì vậy những gì bạn cần làm là kết hợp tất cả các giao diện bạn muốn triển khai vào một giao diện duy nhất

public interface IMyInterface : IInterface1, IInterface2 

và sau đó triển khai tất cả trong lớp triển khai của bạn. Những gì bạn không thể làm là có nhiều giao diện và nhiều triển khai hợp nhất một cách kỳ diệu vào một điểm cuối duy nhất.

+0

Cảm ơn, đó là chính xác những gì tôi đã hỏi. –

+0

Đơn giản, thông minh! Giải pháp rực rỡ. +1 từ tôi –

+0

Tôi có hai giao diện, tôi có phải thực hiện hai dịch vụ không? tôi có thể sử dụng hai giao diện mỗi giao diện có một điểm cuối trong cùng một dịch vụ không? –

5

Với WCF, bạn có thể:

  • có một lớp thực hiện dịch vụ triển khai nhiều giao diện dịch vụ
  • đã một lớp thực hiện dịch vụ tiếp xúc qua nhiều thiết bị đầu cuối, ví dụ một điểm cuối dịch vụ sử dụng BasicHttpBinding cho khả năng tương tác tối đa và một điểm cuối khác sử dụng NetTcpBinding cho hiệu suất tối đa (với các máy khách WCF).
3

Dưới đây là cách bạn có thể hiển thị cùng một giao diện trên hai điểm cuối khác nhau trong App.Config của bạn nếu đó là điều bạn đang hỏi.

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

Nếu lớp triển khai của bạn quá lớn (như tôi) hãy thử triển khai siêu giao diện trong một phần lớp. Bạn có thể đặt một giao diện triển khai vào một tệp. Nó chỉ là một quy ước nhưng có thể hữu ích sau này.

21

Sau đây trông gần gũi hơn với mục tiêu ban đầu và không liên quan đến một giao diện lớn ...

Nhiều thiết bị đầu cuối tại một đơn ListenUri: http://msdn.microsoft.com/en-us/library/aa395210.aspx


Các mẫu liên quan đến ở trên giải thích rằng đó là có thể có nhiều điểm cuối được đăng ký tại cùng một địa chỉ vật lý (listenUri), mỗi thiết bị thực hiện một giao diện khác (hợp đồng), ví dụ:

<endpoint address="urn:Stuff" 
     binding="wsHttpBinding" 
     contract="Microsoft.ServiceModel.Samples.ICalculator" 
     listenUri="http://localhost/servicemodelsamples/service.svc" /> 
<endpoint address="urn:Stuff" 
     binding="wsHttpBinding" 
     contract="Microsoft.ServiceModel.Samples.IEcho" 
     listenUri="http://localhost/servicemodelsamples/service.svc" /> 
<endpoint address="urn:OtherEcho" 
     binding="wsHttpBinding" 
     contract="Microsoft.ServiceModel.Samples.IEcho" 
     listenUri="http://localhost/servicemodelsamples/service.svc" /> 

Điều này là có thể vì các thư đến được định tuyến đến điểm cuối thích hợp dựa trên sự kết hợp của địa chỉ và bộ lọc hợp đồng.

+1

Thực ra tôi đã ngừng đọc khi tôi thấy một câu trả lời hay mà tôi có thể sử dụng. Tôi ước gì tôi đã nhìn thấy phản hồi của bạn đúng lúc. 1 bởi vì đây là một câu trả lời tốt hơn, mặc dù tôi có thể nghĩ về các trường hợp phù hợp với câu trả lời được chấp nhận. –

+1

Đây là giải pháp tốt hơn cho vấn đề tôi gặp phải. Nó cho phép tôi có hai loại serializers riêng biệt, được yêu cầu cho giải pháp của tôi. –

Các vấn đề liên quan