Подтвердить что ты не робот

Несколько интерфейсов из одной службы WCF?

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

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

4b9b3361

Ответ 1

Сначала вам нужно четко указать, что такое служба. Вы имеете в виду одну конечную точку или несколько конечных точек на одном хосте?

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

public interface IMyInterface : IInterface1, IInterface2

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

Ответ 2

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

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


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

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

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

Ответ 3

С WCF вы можете:

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

Ответ 4

Здесь вы можете открыть один и тот же интерфейс на двух разных конечных точках в 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>

Ответ 5

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