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

StackOverflow https://stackoverflow.com/questions/31790

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Службы 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.Я не уверен, почему это так, но это так.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top