Frage

Ich habe 2 Verträge (cA & cb) durch einen einzigen WCF-Dienst implementiert mit zwei Endpunkten (epa & EPB).

Dies ist nicht für Sicherheitszwecke, sondern rein aus Gründen der Übersichtlichkeit / Organisation, Ich mag nur würde Contracta Operationen „sehen“, wenn ich den Dienst über endpointA entdecken; sehen und ebenfalls nur ContractB Operationen über endpointB.

Ich brauche nicht zu „schützen“ diese Vorgänge per se. Das Szenario ist so, dass jeder gegebene Klient nur eine „Seite“ des Service braucht, nie beide (aber die Operationen selbst Ressourcen gemeinsam nutzen, so dass es sinnvoll ist, eher einen einzelnen Dienst zu haben, als 2-Dienste).

Es scheint, dass eine bestimmte Dienstleistung im Grunde 1 WSDL wird, ergo alle Operationen an alle Endpunkte ausgesetzt sind. Ist das die Art und Weise funktioniert es, oder gibt es eine Möglichkeit, „Form“ einen Endpunkt durch Operationen nicht definiert durch die Endpunkte Vertrag Okkludieren?

War es hilfreich?

Lösung

Standardmäßig Sie sind Recht - eine Service-Implementierungsklasse bekommt man WSDL, die alle Service-Methoden enthält (aus allen Dienstleistungsverträgen), dass dieser Service-Klasse implementiert

.

Es gibt keine Möglichkeiten vorhanden sind (soweit ich weiß) auf „Form“ der WSDL in jeder (leicht) Art und Weise - WCF tut bieten Möglichkeiten, in den Prozess zu erhalten, die WSDL schaffen (statisch oder dynamisch), aber diese Aren ‚t für schwache Nerven. Es wäre viel einfacher für Sie, nur um die Umsetzung der Dienstleistungsaufträge in zwei getrennte Klassen aufgeteilt und dann würden Sie zwei separate Dienste haben, getrennten WSDL ist und alle.

Andere Tipps

Marc ist absolutelly rechts. Ich füge nur, warum dies in WCF passiert. In WCF alle Metadaten dazugehörigen Funktionen sind um Dienstmetadaten Verhalten und mex Endpunkt basiert. Diese beiden Funktionen sind auf Service-Level definiert. Sie können also nicht höher granuality nehmen und geben Sie Metadaten pro Endpunkt (es sei denn Sie eine Menge von benutzerdefinierten Code zu schreiben).

WCF-Dienst (Klasse) wird direkt gemappt Wsdl: Dienstelement, die jeden Vertrag als separate Wsdl aussetzt: port (in WCF als Endpunkt bezeichnet). Dies ist der wichtigste Punkt, um Ihre Frage zu beantworten. Wenn Sie nicht Ihren zweiten Vertrag in diesem Wsdl wollen: Service können Sie es in der gleichen Klasse nicht implementieren.

Sie haben erwähnt, dass Sie Ihre Serviceverträge Ressourcen gemeinsam nutzen. In diesem Fall Ihres WCF-Dienst enthält wahrscheinlich auch Business-Logik. Das ist ein Grund für Ihre Probleme. Das gute Design für WCF-Dienste Umsetzung ist sie als Wrapper um separate Klassen Business-Logik nur zu erstellen.

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