Pregunta

¿Cuántos contratos de servicio puede tener un servicio WCF?

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

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

¿Fue útil?

Solución

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 lo haya.

Esta es una manera clara de separar las operaciones que serán implementadas por el mismo servicio en varias interfaces de contrato de servicio conceptualmente diferentes.

Otros consejos

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

Por ejemplo, podría declarar un servicio de la siguiente manera:

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

El cual tendría configuración en la siguiente línea:

<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 eso ayude, pero si buscas las interfaces máximas teóricas que puedes tener para un servicio, sospecho que es un múltiplo increíblemente grande de 2.

@jdiaz

Por supuesto, debe esforzarse por tener asuntos comerciales muy diferentes en diferentes servicios, pero considere el caso en el que desee que, por ejemplo, todos sus servicios implementen 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.

En teoría, un servicio puede tener cualquier número de puntos finales, y cada punto final 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 puntos finales o, alternativamente, que varios puntos finales alojen la misma interfaz.

Sin embargo, si está utilizando la clase ServiceHost para alojar su servicio, en lugar de IIS, solo puede asociar una única interfaz por ServiceHost.No estoy seguro de por qué es así, pero lo es.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top