2008-08-28 3 views
10

Сколько ServiceContracts может иметь сервис WCF?Сколько ServiceContracts может иметь сервис WCF?

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

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

ответ

1

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

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

1

@jdiaz

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

0

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

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

18

Услуги 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.

+0

приятно. 10x для очистки. – 2011-12-01 02:04:55

Смежные вопросы