Сколько ServiceContracts может иметь служба WCF? - PullRequest
10 голосов
/ 28 августа 2008

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

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

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

Ответы [ 4 ]

18 голосов
/ 28 августа 2008

Службы 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

1 голос
/ 28 августа 2008

@ jdiaz

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

1 голос
/ 28 августа 2008

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

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

0 голосов
/ 28 августа 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...