Hallo,
ich schreibe derzeit eine Anwendung die als "generische" Testanwendung für Soap-Webservices dienen soll.
Nach Eingabe der Url, soll die Methode auswählbar sein und anschließend soll eine Eingabemaske für die Parameter angezeigt werden.
Da einige Webservices auch komplexe Typen verwenden, möchte ich aus den Parameterinformationen "dynamisch" zur Laufzeit eine Klasse erstellen. Wie kann ich dafür vorgehen? Mein Ziel ist es am Ende, die Eingaben über ein PropertyGrid zu erlauben.
Das Ermitteln der komplexen Typen sowie Parameter des Webservices habe ich bereits. Für jeden komplexen Typen halte ich den Namen, sowie die Properties (Name und Typ).
Am Beispiel von folgendem sei gezeigt, wie ich die Informationen vorliegen habe.
Typname
Property
Name
Typ (als string)
...
Ich möchte hier vermeiden temporär eine DLL zu kompilieren. Ich hoffe mein Problem ist klar ausgedrückt.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Könnte mit Dynamic Objekt und es an ein Grid zubinden funktioniern.
Sollte man mal gelesen haben:
Hallo inflames2k,
ich würde es wie weismat vorgeschlagen hat umsetzen. (Falls dir aber die IL-Opcodes nicht so geheuer und Expression-Trees lieber sind, so kannst du mit denen den passenden Delegaten erzeugen.
Du könntest auch ein Mocking-Framework wie z.B. Moq verwenden und dort die Expression-Trees und Ergebnisse einschleußen.
Edit: habs noch einmal gelesen und ich denke das mit den Expression passt nicht, da ich das auf die Erstellung der Methoden bezogen habe und dir geht es ja um die Argumente für die Methode. Ein Ansatz via Deserialisierung müsste hier klappen.
Noch als ganz andere Idee: Wenn du WCF verwendest, so könntest du dich direkt in die Kommunikation einhaken und die (serialisierten) Parameter-Werte direkt "in die Leitung" schreiben. Dann entfällt der gesamte Aufwand zum dynamischen Erstellen der Klasse.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo inflames2k,
kennst Du WebServiceStudio? Das löst, genau wie SoapUI, einen Webservice in alle Methoden und Parameter auf.
Nur mit dem Unterschied zu SoapUI, dass der Quelltext von WebServiceStudio vorliegt 😃
Vielleicht kannst Du Dir dort ein paar Anleihen für Deine Umsetzung holen.
Hallo inflames2k,
kennst Du
> ? Das löst, genau wie SoapUI, einen Webservice in alle Methoden und Parameter auf.
Muss ich mir mal ansehen. - Was ich jedoch direkt im Test gemerkt habe, ist das komplexe Typen für das Programm auch keine leichte Aufgabe sind. - Bei Auswahl einer Methode mit komplexen Typen bekam ich direkt eine System.Reflection.TargetParameterCountException. Aber eventuell kann ich ja etwas finden, das mir weiterhilft im Code von dem Programm.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Hi,
was spricht dagegen eine neue C#-Assembly mit Roslyn zu kompilieren?
Die WebServices um die es hier geht klingen spontan noch größeren Services, womit es sich durchaus lohnen könnte eine Assembly und diverse Metadaten zusammenzupacken um diese jederzeit wieder benutzen zu können...
LG