Consommer de service web SOAP dans ASP.NET
J'ai un SOAP WSDL (trouvé ici: https://portal.bsh-partner.com/picenter/server/a2a/) et je suis en train d'utiliser les services web.
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;
La réponse revient toujours, un général de la réponse HTTP de la page d'erreur. Une idée de comment je devrais être en train de passer mon Enveloppe Soap pour obtenir la bonne réponse à partir du service web?
Pourquoi dans le monde à la main, de l'artisanat un message soap?
Idk si je dois upvote ce parce que son un excellent exemple de faire le mal ou downvote pour la même raison...
Idk si je dois upvote ce parce que son un excellent exemple de faire le mal ou downvote pour la même raison...
OriginalL'auteur Lawrence | 2010-07-26
Vous devez vous connecter pour publier un commentaire.
Si vous avez WSDL, vous pouvez créer un Service de Référence dans Visual Studio et il va générer une classe proxy pour vous. Sauf si je suis en manque quelques uns des plus beaux point de votre question, il serait beaucoup plus fiable et beaucoup plus facile à implémenter et à utiliser.
Espère que ça aide.
-1 pour suggérant une référence web.
John est un WCF gars qui est pas trop heureux quand quelqu'un veut utiliser VS2K5 style des références web. Ne peut pas discuter avec moi-même, mais dans certains cas (SharePoint en particulier), le service de référence tout simplement ne fonctionne pas quand la référence web.
Si la personne arrive à être à l'aide de Visual Studio 2005, puis "Ajouter une Référence de Service" l'option n'existe pas. Tout ce que nous savons vraiment, c'est que les technologies utilisées sont C# et un web service SOAP.
De référence" n'est pas mineur. Pour quelqu'un qui est nouveau à cela, ils pourraient très bien aller sur la mauvaise voie et utiliser les technologies existantes pour aucune bonne raison, pour les années à venir. J'ai vu les devs commencer en utilisant WSE tout simplement parce que l'WSE exemple est venu dans une recherche Google pour "la sécurité des services web". Les gens en fait suivre nos conseils, nous avons donc être prudent avec elle. J'ai enlevé le downvote maintenant que vous avez corrigé l'erreur.
OriginalL'auteur Kieren Johnstone
Je viens de remarquer que vous êtes en utilisant ce code sur le serveur.
Ce n'est pas la façon de consommer des services web .NET. Utiliser la fonction "Ajouter une Référence de Service de la commande" dans Visual Studio pour créer des classes de proxy qui vous permettra très facilement de consommer le service.
Voir Comment faire pour Consommer un Service Web pour un exemple, ainsi que http://msdn.microsoft.com/wcf/.
Aussi, jamais utiliser des techniques de manipulation de chaîne lorsque vous travaillez avec des fichiers XML. Brièvement, les règles pour les chaînes et pour XML sont différents. .NET a plusieurs XML Api pour travailler avec XML, et ils savent tous les règles.
jusqu'à ce que j'ai remarqué "
string.Empty
", je pensais que c'était JavaScript.ahhh que de sens
OriginalL'auteur John Saunders
Juste en regardant ton code, on dirait que vous avez oublié d'ajouter votre corps balise de début:
<soapenv:Body>
Sauf si vous avez une raison particulière à la construction de votre message manuellement, je le recommande fortement l'utilisation d'un proxy généré à l'aide de la svcutil.exe l'outil qui est fourni avec visual studio 2008 ou plus tard. (cet outil est utilisé automatiquement par Visual Studio si vous utilisez la fonction "Ajouter une Référence de Service"), en supposant que vous n'avez pas de problème avec l'utilisation de WCF pour gérer la communication avec votre service web.
Sinon, si pour quelque raison vous ne pouvez pas utiliser WCF, comme si vous arrive d'être en développement .Net 2.0 avec Visual Studio 2005, auquel cas vous n'auriez pas le "Ajouter une Référence de Service" disponible, alors peut encore utiliser Visual Studio âgées "Ajouter une Référence Web" pour générer un proxy de votre service web. Cette fonctionnalité utilise le wsdl.exe outil plutôt que d'svcutil.exe.
Sinon, si vraiment vous devez continuer avec cette approche de la construction du message SOAP manuellement, alors je vais au moins vous recommandons d'ajouter certains enregistrement de votre demande, de sorte que vous pouvez plus facilement analyser la construction du message quand quelque chose va mal.
OriginalL'auteur Dr. Wily's Apprentice