komme ich mal auf meine eigentliche Frage zurück. Wie sollte die Parameterliste korrekt aussehen?
Was willst Du denn wissen?
In #19 habe ich die Frage gestellt, auf welcher Schnittstelle das arbeiten soll. Wenn es x_contactSCPD ist (die Bestätigung steht noch aus), habe ich die (hoffentlich) korrekte Schnittstellenbeschreibung verlinkt. Dort findest Du auf Seite 5 (Punkt 2.12) die Beschreibung der Funktion GetPhonebook. Siehst Du dort irgendwo die von Dir angegebenen Eingabeparameter "password" und/oder "login"? Ich nicht und wahrscheinlich war das auch der Grund, warum ich in #19 schrieb
PeterPawn schrieb:
Die Authentifizierung für so einen SOAP-Request sollte (meines Wissens) auf der Transportebene erfolgen, damit haben Parameter wie "login" und "password" als Inhalt des Requests nur dann einen Sinn, wenn sie zu der Parameterliste der aufgerufenen Funktion gehören.
Hast Du mal einen Blick in die ebenfalls von mir verlinkte TR-064-Spezifikation gewagt? Selbst wenn man keine Lust hat, das komplette Dokument
richtig zu lesen, so finden sich doch ab Seite 87 Beispiele, die auch Funktionen mit Eingabeparametern umfassen. Das "SetUserName" auf Seite 88 dürfte zweifellos ein Funktionsaufruf mit einem Eingabeparameter (NewUserName) sein. Das nachfolgende Beispiel ist ein Aufruf einer Funktion mit einem Ausgabeparameter.
Wird da irgendwo im Request angegeben, daß es diesen Parameter in der Response geben wird? Damit dürfte doch die Vermutung
Kruemelino schrieb:
Ich ahne meinen Fehler, ich darf nicht nur die "in"-Argumente in die XML-Überführen sondern muss auch stets die "out"-Argumente senden?
etwas an Wahrscheinlichkeit einbüßen.
Wenn Du bisher beim Aufruf von Funktionen ohne Eingabeparameter tatsächlich bei jedem Request "password" und "login" angegeben haben solltest und die FRITZ!Box hat Dir trotzdem (fehlerfrei) geantwortet, dann dürfte das eher ein Fehler im Request-Parser der FRITZ!Box sein, der dann für Funktionen ohne erwartete Eingabeparameter wahrscheinlich gar nicht erst die angegebenen Parameter prüft.
Meine Frage in #19 war auch nicht, ob der Request "hart kodiert" war, sondern ob er "von Hand" kodiert wurde - sprich, nicht mit einem ordentlichen Parser für eine SOAP-Schnittstellendefinition erzeugt wurde, sondern durch Hinzufügen von XML-Entities über das DOM (im besseren Fall) oder gar durch das Klittern von Strings zu einer XML-Struktur (das ist so ziemlich der "worst case").
Ich wiederhole mich ja nur ungern, aber wenn Du auf die Webservice-Klassen aus der WCF anstelle einer eigenen Implementierung von SOAP-Requests gesetzt hättest (und so richtig weißt Du ja offenkundig noch nicht, wie das SOAP-Protokoll aussieht), dann würden sich diese Fragen gar nicht stellen ... wenn Du tatsächlich unbedingt selbst ein "low level SOAP interface" programmieren willst, solltest Du vielleicht vorher einen Blick in die betreffenden Standards werfen, z.B.
hier.
Aus Punkt 7.1 der SOAP-Spezifikation:
The method
invocation is viewed as a single struct containing an accessor for each
[in] or
[in/out] parameter.
[...]
The method
response is viewed as a single struct containing an accessor for the return value and each
[out] or
[in/out] parameter.
Ich finde auch da keinen Hinweis darauf, daß ein reiner "out"-Parameter irgendwie in einem Request enthalten sein
darf und da so eine Schnittstellendefinition nun mal eine eindeutige "Signatur" so einer Methode darstellt, kann man auch nicht einfach weitere Parameter dazudichten.
Wenn also die FRITZ!Box Dir da tatsächlich solche Requests abgekauft hat, ist das ein Fehler der FRITZ!Box. Ob das allerdings so war, kann ich anhand der Beschreibung im Text auch nur raten, denn irgendwie finde ich in Deinen ganzen Beiträgen kein Beispiel, wie es bei Dir funktioniert haben soll bzw. was Du bisher gemacht hast ... das einzige ist das nicht funktionierende Beispiel aus #18.
Ich verstehe ja, daß das nur ein Hobby ist und verlange auch beileibe nicht, daß sich jeder mit allen diesen Themen auskennen muß. Aber auf der anderen Seite heißt Hobby eben auch, daß man sich etwas intensiver damit beschäftigen muß und da kann man Dir aus meiner Sicht nur mit guten Ratschlägen (und die Benutzung der Webservice-Klassen der WCF (die ist Bestandteil des .NET-Frameworks und keine Zusatzbibliothek) anstelle einer eigenen Implementierung ist und bleibt für mich die beste Empfehlung an dieser Stelle) und entsprechenden Literaturhinweisen helfen ... lesen mußt Du dann schon selbst.
Und wenn wir uns dann hier in "Deinem Thread" über Login/Logout austauschen und davon ausgehen, daß Du die bisherigen Antworten auch gelesen hast (und offensichtlich auch verstanden, denn konkrete Rückfragen zum Geschriebenen finde ich auch nicht) und fleißig beim Programmieren bist, dann weiß ich halt nicht so genau, was Du da anderes erwartet hast. Ich hoffe mal nicht, daß die Feststellung
Kruemelino schrieb:
Du schreibst aber viel
am Ende heißen sollte, daß es zuviel war und Du es deshalb nicht (in Gänze) gelesen hast ... denn dann hätte ich Dir mit diesem Beitrag ja wieder eine ähnliche Last aufgebürdet.