J'ai la requête SOAP dans un fichier XML. Je veux poster la demande au service Web dans .net Comment mettre en œuvre?Comment publier une demande SOAP à partir de .NET?
Répondre
Vous devez publier les données sur HTTP. Utilisez le WebRequest class pour publier les données. Vous devrez envoyer d'autres données avec la demande de publication pour vous assurer d'avoir une enveloppe SOAP valide. Lisez le SOAP spec pour tous les détails.
Ce n'est pas la méthode normale. En général, vous utiliseriez WCF ou la référence de service Web de style ancien pour générer un client proxy pour vous. Cependant, ce que vous devez généralement faire est d'utiliser HttpWebRequest pour vous connecter à l'URL, puis envoyer le code XML dans le corps de la requête.
Je me demande comment le XML est généré et est-ce un message SOAP valide? Vous pouvez le poster via HTTP comme suggéré par les gens ci-dessus.
Si vous voulez tester si cela va fonctionner, vous pouvez essayer SoapUI (pour tester, je veux dire).
var uri = new Uri("http://localhost/SOAP/SOAPSMS.asmx/add");
var req = (HttpWebRequest) WebRequest.CreateDefault(uri);
req.ContentType = "text/xml; charset=utf-8";
req.Method = "POST";
req.Accept = "text/xml";
req.Headers.Add("SOAPAction", "http://localhost/SOAP/SOAPSMS.asmx/add");
var strSoapMessage = @"<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<soap:Body><add xmlns='http://tempuri.org/'><a>23</a><b>5</b></soap:Body>
</soap:Envelope>";
using (var stream = new StreamWriter(req.GetRequestStream(), Encoding.UTF8))
stream.Write(strSoapMessage);
Salut, si je n'ai pas de valeur SOAP ACTION dans mon xml –
Je l'ai fait quelque chose comme ça, la construction d'une requête XML manuellement, puis en utilisant l'objet WebRequest pour soumettre la demande:
string data = "the xml document to submit";
string url = "the webservice url";
string response = "the response from the server";
// build request objects to pass the data/xml to the server
byte[] buffer = Encoding.ASCII.GetBytes(data);
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = buffer.Length;
Stream post = request.GetRequestStream();
// post data and close connection
post.Write(buffer, 0, buffer.Length);
post.Close();
// build response object
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream responsedata = response.GetResponseStream();
StreamReader responsereader = new StreamReader(responsedata);
response = responsereader.ReadToEnd();
Les variables de chaîne au début du code sont ce que vous ensemble, alors vous obtenez une réponse de chaîne (espérons ...) du serveur.
Maintenant, j'essaie le même code que vous posté. Mais j'ai obtenu le type de support non pris en charge –
Ce sera le request.ContentType, vous devriez essayer 'text/xml' (Je pense) pour un service web asp.net standard. –
Son travail pour le service ASMX. Maintenant, je veux poster la demande SOAP pour le service WCF. Comment mettre en œuvre cela. –
Voici un autre exemple - celui-ci en VB:
Dim manualWebClient As New System.Net.WebClient()
manualWebClient.Headers.Add("Content-Type", "application/soap+xml; charset=utf-8")
' Note: don't put the <?xml... tag in--otherwise it will blow up with a 500 internal error message!
Dim bytArguments As Byte() = System.Text.Encoding.ASCII.GetBytes(_
"<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" & System.Environment.NewLine & _
" <soap12:Body>" & System.Environment.NewLine & _
" <Multiply xmlns=""http://cptr446.class/"">" & System.Environment.NewLine & _
" <x>5</x>" & System.Environment.NewLine & _
" <y>4</y>" & System.Environment.NewLine & _
" </Multiply>" & System.Environment.NewLine & _
" </soap12:Body>" & System.Environment.NewLine & _
"</soap12:Envelope>")
Dim bytRetData As Byte() = manualWebClient.UploadData("http://localhost/CPTR446.asmx", "POST", bytArguments)
MessageBox.Show(System.Text.Encoding.ASCII.GetString(bytRetData))
Désolé pour cognant un vieux fil est ici ma solution à ce
''' <summary>
''' Sends SOAP to a web service and sends back the XML it got back.
''' </summary>
Public Class SoapDispenser
Public Shared Function CallWebService(ByVal WebserviceURL As String, ByVal SOAP As String) As XmlDocument
Using wc As New WebClient()
Dim retXMLDoc As New XmlDocument()
wc.Headers.Add("Content-Type", "application/soap+xml; charset=utf-8")
retXMLDoc.LoadXml(wc.UploadString(WebserviceURL, SOAP))
Return retXMLDoc
End Using
End Function
End Class
- 1. Délai de demande SOAP dans l'application Console (.NET)
- 2. Demande HTTP SOAP très lente
- 3. Comment publier une application ClickOnce à partir d'un programme d'installation
- 4. Comment accéder aux services SOAP à partir de l'iPhone
- 5. Comment publier des classes wmi dans .net?
- 6. Soap logging in .net
- 7. Définir les attributs pour les paramètres de demande SOAP PHP
- 8. Publier sur RSS à partir de la ligne de commande
- 9. Liste .Net à un tableau SOAP et retour à une liste .Net
- 10. Publier ClickOnce à partir de la ligne de commande
- 11. Services Web .NET - Défauts SOAP
- 12. Comment appeler une bibliothèque C à partir de .NET
- 13. Comment publier une application ClickOnce à l'aide de Microsoft.Build.BuildEngine
- 14. Utilisation d'un service Web SOAP 1.1 à partir de .NET 3.5
- 15. Comment publier sur une page Web
- 16. Impossible de faire la demande en utilisant SOAP à un service web
- 17. Collecte de données à partir de la réponse SOAP NDFD
- 18. Lecture de XML/SOAP à partir d'un XMLDocument
- 19. Forcez NHibernate à publier une mise à jour
- 20. Comment publier une notification FB à partir d'une application FB connect?
- 21. Comment utiliser WebRequest pour publier des données et obtenir une réponse à partir d'une page Web
- 22. .NET: Comment créer une vignette à partir du flash
- 23. Demande le type Lua userdata à partir de C
- 24. Attachement SOAP de .NET 3.5 vers le service web PHP
- 25. envoyer une demande à apple - à partir de l'application personnalisée iphone
- 26. Comment publier une application dans Visual Studio?
- 27. Comment puis-je publier un projet ASP.NET MVC à partir de la ligne de commande?
- 28. Comment consigner des messages XML SOAP (demande et réponse) dans la base de données SQL?
- 29. Publier sur une URL avec wxWidgets
- 30. Firebug onglet net 0 problème de demande
lol, "Lire la spécification de savon" ... années plus tard, il revient avec une barbe et se retrouve dans un asile psychiatrique. – duckworth
La spécification SOAP est relativement simple, c'est le WS - quelles que soient les spécifications qui sucent le plus. –