2 Stimmen

Verwendung des Standardkonstruktors für den generierten Webdienst-Proxy verhindern

Ich habe eine Situation, in der ich mehrere Webdienste habe, die ich konsumieren muss. Ich benötige die Möglichkeit, benutzerdefinierte Aktionen im Konstruktor des Proxys durchzuführen, bevor die Aufrufe erfolgen (Zuweisung der konfigurierten URL, Zuweisung des SOAP-Headers usw.).

Meine erste Lösung besteht darin, eine untergeordnete Klasse zu erstellen, die von dem generierten Proxy abgeleitet ist, und dann diese Aktionen im Konstruktor der untergeordneten Klasse durchzuführen. Auf diese Weise kann der Anwendungscode den Konstruktor der untergeordneten Klasse aufrufen und einen gültigen Proxy erhalten, der die benötigten Elemente enthält.

Ich versuche zu verhindern, dass der Anwendungscode den Konstruktor des generierten Proxys aufruft, damit die Benutzer den Proxy nicht versehentlich instanziieren, ohne meine benutzerdefinierten Einstellungen vorzunehmen. Mein erster Gedanke ist, den generierten Code in eine separate Assembly von der Child-Assembly zu verschieben und sicherzustellen, dass der App-Code nur einen Verweis auf die Child-Assembly hat. Dies funktioniert zum größten Teil, aber...

Die Dienste enthalten komplexe Typen, die im Proxy definiert sind. Ich brauche den App-Code, um diese Klassen zu referenzieren, was bedeutet, dass der App-Code ohnehin einen Verweis auf die Basis-Assembly benötigt, was bedeutet, dass sie jetzt Zugriff auf den generierten Konstruktor haben.

Ich habe eine übermäßig komplizierte Lösung versucht, bei der ich jeden der generierten komplexen Typen in eine Schnittstelle verpackt habe und dann die eigentlichen Aufrufe versteckt und durch Kopien des Objekts als Schnittstellentyp ersetzt habe. Dies funktionierte einmal oder zweimal, aber es wird sehr schnell hässlich.

Es scheint, dass die einzige Möglichkeit, wie ich alles haben kann, was ich will, darin besteht, den öffentlichen Konstruktor des generierten Proxys zu entfernen und ihn durch einen geschützten Konstruktor zu ersetzen und dann einen Verweis auf diese Baugruppe zuzulassen. Mein Problem ist, dass die einzige Möglichkeit, die mir dazu einfällt, darin besteht, den generierten Code zu manipulieren, um den Konstruktor zu ändern.

Irgendwelche Ideen? Ich verwende WSDL.exe, um die Proxys zu generieren, und es gibt keine Option, um den Konstruktor auszublenden. Gibt es eine andere Möglichkeit, die ich einfach übersehe? Ich nehme an, dass ich ein Tool schreiben kann, um den Proxy sofort nach der Generierung automatisch zu ändern, aber das erscheint mir einfach hässlich.

Danke

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X