Domanda

Quanti ServiceContracts può avere un servizio WCF?

Nello specifico, poiché un ServiceContract è un attributo di un'interfaccia, quante interfacce posso codificare in un servizio Web WCF?È uno a uno?

Ha senso separare i contratti tra più servizi web?

È stato utile?

Soluzione

Puoi fare in modo che un servizio implementi tutti i contratti di servizio che desideri.Voglio dire, non so se c'è un limite, ma non credo che ci sia.

Si tratta di un modo accurato per separare le operazioni che verranno implementate dallo stesso servizio in diverse interfacce di contratto di servizio concettualmente diverse.

Altri suggerimenti

I servizi WCF possono avere più endpoint, ognuno dei quali può implementare un contratto di servizio diverso.

Ad esempio, potresti dichiarare un servizio come segue:

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

Che avrebbe una configurazione in questo senso:

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

Spero che questo aiuti, ma se stavi cercando le interfacce massime teoriche che puoi avere per un servizio, sospetto che sia un multiplo follemente grande di 2.

@jdiaz

Naturalmente dovresti cercare di avere questioni aziendali molto diverse in diversi servizi, ma considera il caso in cui desideri che, ad esempio, tutti i tuoi servizi implementino un'operazione GetVersion().Potresti avere un contratto di servizio solo per quell'operazione e fare in modo che ogni servizio lo implementi, invece di aggiungere l'operazione GetVersion() al contratto di tutti i tuoi servizi.

Un servizio può teoricamente avere un numero qualsiasi di endpoint e ciascun endpoint è vincolato a un particolare contratto o interfaccia, quindi è possibile che un singolo servizio concettuale (e configurato) ospiti più interfacce tramite più endpoint o in alternativa che diversi endpoint ospitino la stessa interfaccia.

Se utilizzi la classe ServiceHost per ospitare il tuo servizio, invece di IIS, puoi associare solo una singola interfaccia per ServiceHost.Non sono sicuro del motivo per cui sia così, ma è così.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top