2008-08-28 20 views
10

¿Cuántos ServiceContracts tiene un servicio WCF?¿Cuántos ServiceContracts tiene un servicio WCF?

Específicamente, dado que un ServiceContract es un atributo de una interfaz, ¿cuántas interfaces puedo codificar en un servicio web WCF? ¿Es uno de uno a uno?

¿Tiene sentido separar los contratos en múltiples servicios web?

Respuesta

1

Puede hacer que un servicio implemente todos los contratos de servicio que desee. Quiero decir, no sé si hay un límite, pero no creo que exista.

Esa es una manera ordenada de separar las operaciones que implementará el mismo servicio en varias interfaces de contrato de servicio conceptualmente diferentes.

1

@jdiaz

supuesto, usted debe esforzarse por tener muy diferentes asuntos de negocios en diferentes servicios, pero tenga en cuenta el caso en el que desea que, por ejemplo, todos los servicios de implementar una operación GetVersion(). Podría tener un contrato de servicio solo para esa operación y hacer que cada servicio lo implemente, en lugar de agregar la operación GetVersion() al contrato de todos sus servicios.

0

Un servicio puede teóricamente tener cualquier número de Endpoints, y cada Endpoint está vinculado a un contrato o interfaz particular, por lo que es posible que un único servicio conceptual (y configurado) aloje múltiples interfaces a través de múltiples endpoints o alternativamente para varios puntos finales para alojar la misma interfaz.

Si está utilizando la clase ServiceHost para alojar su servicio, sin embargo, en lugar de IIS, solo puede asociar una única interfaz por ServiceHost. No estoy seguro de por qué este es el caso, pero lo es.

18

Los servicios de WCF pueden tener múltiples puntos finales, cada uno de los cuales puede implementar un contrato de servicio diferente.

Por ejemplo, usted podría tener un servicio declarado de la siguiente manera:

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

que habría de configuración a lo largo de estas líneas:

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

Esperamos que ayuda, pero si usted fuera después de que el máximo teórico interfaces que puede tener para un servicio Sospecho que es un múltiplo locamente grande de 2.

+0

nice. 10x para aclarar eso. –

Cuestiones relacionadas