Pergunta

Quantos ServiceContracts um serviço WCF pode ter?

Especificamente, como um ServiceContract é um atributo de uma interface, quantas interfaces posso codificar em um serviço Web WCF?É um para um?

Faz sentido separar os contratos entre vários serviços web?

Foi útil?

Solução

Você pode fazer com que um serviço implemente todos os contratos de serviço que desejar.Quer dizer, não sei se existe um limite, mas acho que não existe.

Essa é uma maneira simples de separar operações que serão implementadas pelo mesmo serviço em diversas interfaces de contrato de serviço conceitualmente diferentes.

Outras dicas

Os serviços WCF podem ter vários pontos finais, cada um dos quais pode implementar um contrato de serviço diferente.

Por exemplo, você poderia ter um serviço declarado da seguinte forma:

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

Que teria configuração ao longo destas linhas:

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

Espero que ajude, mas se você estava atrás das interfaces máximas teóricas que pode ter para um serviço, suspeito que seja um múltiplo absurdamente grande de 2.

@jdiaz

É claro que você deve se esforçar para ter assuntos de negócios muito diferentes em serviços diferentes, mas considere o caso em que deseja que, por exemplo, todos os seus serviços implementem uma operação GetVersion().Você poderia ter um contrato de serviço apenas para essa operação e fazer com que todos os serviços o implementassem, em vez de adicionar a operação GetVersion() ao contrato de todos os seus serviços.

Um serviço pode, teoricamente, ter qualquer número de endpoints, e cada endpoint está vinculado a um contrato ou interface específico, portanto, é possível que um único serviço conceitual (e configurado) hospede várias interfaces por meio de vários endpoints ou, alternativamente, que vários endpoints hospedem a mesma interface.

Porém, se você estiver usando a classe ServiceHost para hospedar seu serviço, em vez do IIS, você poderá associar apenas uma única interface por ServiceHost.Não sei por que esse é o caso, mas é.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top