Сколько ServiceContracts может иметь служба WCF?

Сколько ServiceContracts может иметь служба WCF?

В частности, поскольку ServiceContract является атрибутом интерфейса, сколько интерфейсов я могу кодировать в одну веб-службу WCF? Это один-к-одному?

Имеет ли смысл разделять контракты между несколькими веб-сервисами?

4 ответа

Решение

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

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

Службы WCF могут иметь несколько конечных точек, каждая из которых может реализовывать свой контракт на обслуживание.

Например, вы могли бы объявить службу следующим образом:

[ServiceBehavior(Namespace = "DemoService")]
public class DemoService : IDemoService, IDoNothingService

Который будет иметь конфигурацию по этим направлениям:

<service name="DemoService" behaviorConfiguration="Debugging">
  <host>
    <baseAddresses>
      <add baseAddress = "http://localhost/DemoService.svc" />
    </baseAddresses>
  </host>
  <endpoint 
    address =""
    binding="customBinding"
    bindingConfiguration="InsecureCustom"
    bindingNamespace="http://schemas.com/Demo" contract="IDemoService"/>
  <endpoint 
    address =""
    binding="customBinding"
    bindingConfiguration="InsecureCustom"
    bindingNamespace="http://schemas.com/Demo" contract="IDoNothingService"/>
</service>      

Надеюсь, что это поможет, но если вам нужен теоретический максимум интерфейсов, которые вы можете иметь для службы, я подозреваю, что это какое-то безумно большое кратное 2.

@jdiaz

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

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

Если вы используете класс ServiceHost для размещения своей службы, однако вместо IIS вы можете связать только один интерфейс для ServiceHost. Я не уверен, почему это так, но это так.

Другие вопросы по тегам