Kraft .NET Webservice lokale Objektklasse zu verwenden, nicht-Proxy-Klasse
-
03-07-2019 - |
Frage
Ich habe eine Webservice, die ich aus einem Fenster bin Aufruf Forms-Anwendung (beide .NET, die beide in der gleichen Lösung), und ich würde meine webservice gerne von anderer Stelle im Projekt ein benutzerdefiniertes Objekt zurück - es ist ein gemeinsames einwenden, dass sie einen Verweis beide teilen auf, wie es in meiner Lösung in dem dritten Projekt ist. Als ich den Webservice aufrufen, gibt es eine „Person“ Objekt, aber es ist im Namensraum des Webservice, und es ist von einer Proxy-Klasse erstellt, die der Webservice selbst erzeugt. Als solche kann ich es nicht manipulieren und sende es an mein Programm, das auf der Grundlage der gemeinsamen Kopie der Klasse ein „Person“ Objekt erwartet, keine Proxy-Kopie aus dem Webservice-Namespace, und ich erhalte eine Fehlermeldung, wenn ich versuche in der richtigen Klasse Typ CDen.
Wie erzwinge ich den Webservice eine lokale Kopie der Klasse zu verwenden, keine Proxy-Kopie? Ist meine Frage keinen Sinn in diesem Zusammenhang machen? Wenn nicht, werde ich es klären.
Von Bedeutung - ich habe zurückgegriffen werden alle Parameter zu geben ByRef und diese zurückgegebenen Werte mit einer Kopie des Objekts füllen ich bei der Rückkehr erstellen. Das kann nicht der beste Weg, dies zu tun!
Lösung
Wenn Sie svcutil.exe werden mit einem WCF-Client-Proxy zu generieren, können Sie / Verweis auf die Befehlszeile um die Baugruppe zu spezifizieren die gemeinsame Klasse enthält. Svcutil sollte diese Klassendefinition wiederverwenden, anstatt zu generieren neue im Dienst-Proxy-Namensraum.
Auch wird dies nur funktionieren, wenn Ihre gemeinsame Klasse von Wert serializable und übergeben wird (das heißt, sie als Daten Vertrag ausgesetzt ist, nicht als Dienstleistungsvertrag).
Andere Tipps
Wenn Sie WCF verwenden, ist es ziemlich einfach, die gleichen Datenverträge und Service-Schnittstelle zwischen dem Client und dem Verbraucher zu verwenden. Sie können entweder in der generierten Proxy-Klasse kompilieren und ändern Sie es, den richtigen Namensraum zu verwenden oder die
Ich bin nicht sicher, aber wenn Sie einen .NET Web-Service kompilieren wird es eine DLL-Datei erstellen, die Sie versuchen können, dass für die lokale Verwendung. Aber wenn ich serviceorientierte Anwendungen am Bau, schaff' ich verschiedene Schichten in meiner Lösung für zB Data Access Layer, Logic Layer Service Layer, UI-Layer, Layer-Controller und zum Beispiel in der Controller-Schicht werde ich eine Benutzerauthentifizierungsmethode tun, das ist verbunden mit dem Data Access Layer und Logik-Schicht und dann werde ich diese Methode auf Service-Layer nennen, und ich kann es auch auf der UI-Ebene nennen, und wenn ich es aus der UI-Ebene aufrufen wird es lokal genannt, wenn ich will, es benutzen von der Dienstschicht, werde ich eine Web-Methode unter Verwendung dieser Methode erstellen, die ein bool oder Benutzername usw. angezeigt werden kann.