Ich versuche einen Webservice zu nutzen, der bereits existiert und das funktioniert perfekt. Nachdem ich viele Tutorials und Beispiele gelesen hatte, bekam ich endlich eine Antwort vom Server:
Der Server konnte die Anfrage nicht verarbeiten. Objektreferenz wurde nicht auf eine Instanz eines Objekts gesetzt
Mit dem WS können Sie einfach eine ID aus einem NT-Login erhalten und eine ID erhalten (ein String-Parameter, eine String-Antwort).
Hier ist mein Perl-Skript:
%Vor%Und hier ist die Ausgabe:
%Vor%Nach einigen Nachforschungen habe ich den Eindruck, dass der Fehler auf der Seite des WS-Servers liegt. Aber der WS scheint perfekt zu funktionieren, also denke ich, dass etwas mit meinem Perl-Skript nicht stimmt, aber ich kann nicht herausfinden, was ...
Jede Hilfe wäre sehr willkommen!
Danke,
[Update # 1]
Hier ist das Beispiel der WS-Seite:
Anfrage
%Vor%Antwort
%Vor%[Update # 2]
Hier ist die Ausgabe, die der Benutzer1215106 vorgeschlagen hat:
%Vor%Bitte testen Sie den unten stehenden Code und teilen Sie uns Ihre Erfahrungen und Ergebnisse mit.
%Vor%[UPDATE]
Gestützt auf die von Ihnen geposteten Informationen, empfehle ich, dass Sie den direkten HTTP::Request
code ausführen, ohne die Bibliothek SOAP::Lite
. Ändern Sie den folgenden Code mit genauen Informationen, die Sie haben:
"Der Server konnte die Anfrage nicht verarbeiten. Objektverweis nicht auf eine Instanz eines Objekts gesetzt "
Nach einigen Nachforschungen habe ich den Eindruck, dass der Fehler auf der Seite des WS-Servers liegt. Aber der WS scheint perfekt zu funktionieren, also denke ich, dass etwas mit meinem Perl-Skript nicht stimmt, aber ich kann nicht herausfinden, was ...
Dies ist definitiv ein serverseitiger Fehler. Es liegt daran, was wohl ein Fehler im .NET-Server-Code ist. Es ist ein System.NullReferenceException
, einfach zu reproduzieren:
Dies hat nichts mit Ihrem SOAP-Client zu tun, nur dass der Client den Fehler durch Auslösen der Fehlermeldung anzeigt.
In einem Kommentar zu einer anderen Antwort schrieb du:
Übrigens, xxxxx ist Tempuri.org, was - denke ich - die Standardadresse beim Schreiben eines .Net WS ist. Das sehe ich sowieso im offiziellen Beispiel, aber vielleicht sollte ich das nicht benutzen?
Es ist eine wilde Vermutung, aber ein Benutzer in einer anderen Diskussion hat eine NullReferenceException
, weil er nicht die richtige URL für die SOAPAction
Kopfzeile . Das können Sie überprüfen. Finden Sie heraus, was der Header SOAPAction
sein soll und stellen Sie sicher, dass Sie ihn entsprechend setzen. Wenn Sie Zugriff auf das, was passiert, Server-Sice, die natürlich beim Debuggen helfen würde, weil schließlich der Fehler ist klar Server-Seite.
Wir sind uns alle einig, dass der Fehler HTTP 500 server auf der Serverseite einen Fehler anzeigt.
Der erste Anlauf besteht also darin, vollständige Debugging-Protokolle von der WebService-Anwendung abzurufen und an den Entwickler / Anbieter dieses WebService zu senden. Melden Sie dies als Fehler in ihrer Implementierung. Toleriere hier keinen Unsinn. Selbst wenn Ihr Perl-Client fehlerhafte (oder fehlende) Daten an den Web-Service übergibt, sollten sie nicht mit HTTP 500 Server Error antworten. Das ist ein Fehler. Die Fehlermeldung sollte seine Arme um die fehlerhafte Client-Anfrage legen und eine Fehlermeldung geben, die wie folgt lauten sollte: "Ah, schau mal hier. Was schickst du mir? Habe ich dir das in meiner schönen Dokumentation nicht gesagt? der NTUser muss auf dem System existieren? (oder was auch immer das Problem ist) Senden Sie diese Anfrage erneut, aber senden Sie sie mir diesmal mit echten Daten, die ich verwenden kann. " Der Fehler sollte im Bereich HTTP 400 liegen.
Falls erforderlich, um den Fall, dass dies ein Fehler im Web-Service-Code ist, weiter zu sichern, eliminieren Sie Ihren Perl-Client als Hauptursache des Problems, indem Sie den Fehler mit SOAPUi
Sie können das Soap-UI-Projekt dann mit den Web-Service-Entwicklern teilen, es sollte ihnen helfen, diesen Fehler leicht zu finden.
Ich habe Folgendes gefunden: Ссылка
Der Typ hat diese Zeile zu ihrem Code hinzugefügt:
%Vor%Bitte verwenden Sie auch strikt; Verwenden Sie Warnungen;
Verschiebe die Shebang-Linie ganz oben (#! perl)
Debug aktivieren:
%Vor%Stellen Sie sicher, dass LWP :: Authen> Ntlm in Ihrem System installiert ist.
Momentan erhalten Sie "HTTP / 1.1 500 Internal Server Error" -Fehler. Dies bedeutet, dass der Servercode stirbt, nicht richtig funktioniert. Es sollte Ihnen eine sinnvolle Fehlermeldung senden ...
Grüße,
Tags und Links perl soap web-services soaplite