Frage

Wie viele ServiceContracts kann ein WCF-Dienst haben?

Da ein ServiceContract ein Attribut einer Schnittstelle ist, stellt sich die Frage: Wie viele Schnittstellen kann ich in einen WCF-Webdienst codieren?Ist es eins zu eins?

Ist es sinnvoll, die Verträge auf mehrere Webdienste aufzuteilen?

War es hilfreich?

Lösung

Sie können alle gewünschten Serviceverträge von einem Service implementieren lassen.Ich meine, ich weiß nicht, ob es eine Grenze gibt, aber ich glaube nicht, dass es eine gibt.

Dies ist eine gute Möglichkeit, Vorgänge zu trennen, die von demselben Dienst in mehreren konzeptionell unterschiedlichen Dienstvertragsschnittstellen implementiert werden.

Andere Tipps

WCF-Dienste können mehrere Endpunkte haben, von denen jeder einen anderen Dienstvertrag implementieren kann.

Beispielsweise könnten Sie einen Dienst wie folgt deklarieren lassen:

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

Was eine Konfiguration in dieser Richtung hätte:

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

Ich hoffe, das hilft, aber wenn Sie nach den theoretisch maximalen Schnittstellen suchen, die Sie für einen Dienst haben können, vermute ich, dass es sich um ein verrückt großes Vielfaches von 2 handelt.

@jdiaz

Natürlich sollten Sie danach streben, sehr unterschiedliche Geschäftsangelegenheiten in unterschiedlichen Diensten zu berücksichtigen, aber denken Sie an den Fall, in dem Sie beispielsweise möchten, dass alle Ihre Dienste eine GetVersion()-Operation implementieren.Sie könnten einen Dienstvertrag nur für diesen Vorgang haben und ihn von jedem Dienst implementieren lassen, anstatt den GetVersion()-Vorgang zum Vertrag aller Ihrer Dienste hinzuzufügen.

Ein Dienst kann theoretisch eine beliebige Anzahl von Endpunkten haben, und jeder Endpunkt ist an einen bestimmten Vertrag oder eine bestimmte Schnittstelle gebunden. Daher ist es möglich, dass ein einzelner konzeptioneller (und konfigurierter) Dienst mehrere Schnittstellen über mehrere Endpunkte hostet oder alternativ mehrere Endpunkte hostet die gleiche Schnittstelle.

Wenn Sie jedoch die ServiceHost-Klasse zum Hosten Ihres Dienstes verwenden, können Sie anstelle von IIS nur eine einzige Schnittstelle pro ServiceHost zuordnen.Ich bin mir nicht sicher, warum das so ist, aber es ist so.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top