Несколько интерфейсов из одного сервиса WCF? - PullRequest
32 голосов
/ 06 апреля 2009

Может ли одна служба WCF предлагать несколько интерфейсов, и если да, то как бы вы выразили это в app.config?

Я имею в виду одну услугу, предлагающую несколько интерфейсов на одной конечной точке.

Ответы [ 5 ]

52 голосов
/ 06 апреля 2009

Во-первых, вам нужно понять, что такое услуга. Вы имеете в виду одну конечную точку или несколько конечных точек на одном хосте?

Если вы имеете в виду одну конечную точку, тогда да, но с небольшой работой. Конечная точка может реализовать только один интерфейс; так что вам нужно объединить все интерфейсы, которые вы хотите реализовать, в единый интерфейс

public interface IMyInterface : IInterface1, IInterface2

и затем реализуйте их все внутри вашего класса реализации. Чего вы не можете сделать, так это иметь несколько интерфейсов, и несколько реализаций волшебным образом объединяются в одну конечную точку.

23 голосов
/ 08 февраля 2012

Следующее выглядит ближе к исходной цели и не требует большого интерфейса ...

Несколько конечных точек в одном ListenUri: http://msdn.microsoft.com/en-us/library/aa395210.aspx


В приведенном выше примере объясняется, что можно зарегистрировать несколько конечных точек по одному и тому же физическому адресу (listenUri), каждый из которых реализует отдельный интерфейс (контракт), например ::100100

<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" />

Это возможно, поскольку входящие сообщения направляются в соответствующую конечную точку на основе комбинации фильтров адресов и контрактов.

5 голосов
/ 06 апреля 2009

С WCF вы можете:

  • имеет один класс реализации службы, который реализует несколько интерфейсов службы
  • имеют один класс реализации службы, предоставляемый через несколько конечных точек, например, одна конечная точка службы использует BasicHttpBinding для максимальной совместимости, а другая конечная точка использует NetTcpBinding для максимальной производительности (с клиентами WCF).
3 голосов
/ 20 июля 2011

Если ваш класс реализации становится слишком большим (как мой), попробуйте реализовать суперинтерфейс в частичном классе. Вы можете поместить одну реализацию интерфейса в один файл. Это просто соглашение, но может пригодиться позже.

3 голосов
/ 06 апреля 2009

Вот как вы можете выставить один и тот же интерфейс на двух разных конечных точках в вашем App.Config, если это то, что вы спрашиваете.

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...