Konsumieren von SOAP-web-service in ASP.NET
Habe ich einen SOAP-WSDL (gefunden hier: https://portal.bsh-partner.com/picenter/server/a2a/) und ich bin versucht zu konsumieren, die web-services.
var soapEnvelope = string.Empty;
soapEnvelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
soapEnvelope += "<soapenv:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:q0=\"http://thexmlhost.com\">";
soapEnvelope += "<q0:Connect>";
soapEnvelope += "<q0:Username>username</q0:Username>";
soapEnvelope += "<q0:Password>password</q0:Password>";
soapEnvelope += "</q0:Connect>";
soapEnvelope += "</soapenv:Body>";
soapEnvelope += "</soapenv:Envelope>";
var xmlHttp = new MSXML2.ServerXMLHTTP40();
xmlHttp.open("POST", "https://thexmlhost.com/", "", "");
xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttp.setRequestHeader("SOAPAction", "thexmlhost.com/");
xmlHttp.send(soapEnvelope);
xmlHttp.waitForResponse(500);
var outXml = xmlHttp.responseText;
Die Antwort hält der Rückkehr eine Allgemeine HTTP-Antwort-Fehler-Seite. Irgendeine Idee, wie ich sollte vorbei mein Soap-Umschlag, um die richtige Antwort von der web-service?
Warum in der Welt sind Sie basteln eine soap-Nachricht?
Idk, wenn ich sollte upvote dies, weil es ein so großartiges Beispiel dafür, es zu tun falsch oder downvote es aus dem gleichen Grund...
Idk, wenn ich sollte upvote dies, weil es ein so großartiges Beispiel dafür, es zu tun falsch oder downvote es aus dem gleichen Grund...
InformationsquelleAutor Lawrence | 2010-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die WSDL, können Sie erstellen eine Service Reference in Visual Studio, und es wird generieren einer proxy-Klasse für Sie. Es sei denn, ich bin fehlt etwas feiner Punkt in Ihrer Frage, es wäre viel zuverlässiger und viel einfacher zu implementieren und zu verwenden.
Hoffe, das hilft.
-1 für die Annahme, ein web-Verweis.
John ist ein WCF Kerl, der nicht allzu erfreut, wenn jemand will, um zu verwenden VS2K5-style-Referenzen. Kann nicht argumentieren, dass mit mir selbst, aber in einigen Fällen (SharePoint im besonderen), die service-reference einfach nicht funktioniert, wenn der web-Referenz wird.
Wenn der Fragesteller zufällig Visual Studio 2005 verwenden, dann "Add Service Reference" option nicht vorhanden. Alles, was wir wirklich wissen ist, dass die beteiligten Technologien sind C# und SOAP-web-service.
Referenz" ist nicht gering. Für jemanden, der neu hier ist, Sie könnte sehr gut gehen auf dem falschen Weg und werden mit älterer Technologie für keinen guten Grund, für Jahre zu kommen. Ich habe gesehen, devs starten durch mit WSE einfach, weil eine WSE Beispiel kam in eine Google-Suche nach "web service security". Menschen, die tatsächlich Folgen unsere Beratung, wir müssen also vorsichtig sein. Ich habe entfernt die downvote, jetzt haben Sie den Fehler korrigiert.
InformationsquelleAutor Kieren Johnstone
Mir ist nur aufgefallen, dass Sie mit diesem code auf der server-Seite.
Dies ist nicht der Weg, um web-services konsumiert .NET. Verwenden Sie die "Add Service Reference" - Befehl in Visual Studio zum erstellen von proxy-Klassen, die Ihnen erlauben, sehr leicht verbrauchen die service.
Sehen Wie zu Konsumieren eines Web Service für ein Beispiel, wie http://msdn.microsoft.com/wcf/.
Auch, nie verwenden Sie die string-manipulation-Techniken bei der Arbeit mit XML. Kurz, die Regeln für Zeichenfolgen und XML sind unterschiedlich. .NET hat mehrere XML-APIs, mit XML zu arbeiten, und Sie alle kennen die Regeln.
bis ich gemerkt habe "
string.Empty
", dachte ich, das war JavaScript.ahhh, das macht Sinn
InformationsquelleAutor John Saunders
Nur einen Blick auf Ihren code ein, es sieht aus wie Sie vergessen haben, fügen Sie Ihren body-start-tag:
<soapenv:Body>
Es sei denn, Sie haben einen besonderen Grund zu sein, bauen Ihre Nachricht manuell, ich würde empfehlen, über einen proxy generiert mit dem svcutil.exe tool, das mit visual studio 2008 oder höher. (dieses tool wird automatisch verwendet, die von Visual Studio wenn Sie den "Add Service Reference" - Funktion), vorausgesetzt, dass Sie don ' T haben ein problem mit der Verwendung von WCF-die Verarbeitung der Kommunikation mit dem web-service.
Alternativ, wenn aus irgendeinem Grund Sie nicht verwenden können, WCF, wie wenn Sie geschehen, zu entwickeln .Net 2.0 mit Visual Studio 2005, in dem Fall Sie hätte nicht den "Add Service Reference" - Funktion, dann könnte noch die Verwendung von Visual Studio, die älter "Add Web Reference" - Funktion generiert einen proxy für den web-service. Diese Funktion verwendet wsdl.exe tool eher als svcutil.exe.
Ansonsten, wenn Sie wirklich müssen weiterhin mit diesem Ansatz der Aufbau der SOAP-Nachricht manuell, dann würde ich zumindest empfehlen Sie, einige Protokollierung zu Ihrer Anwendung, so dass Sie leichter analysieren die konstruierte Nachricht, wenn etwas schief geht.
InformationsquelleAutor Dr. Wily's Apprentice