Je dois me connecter à un service Web tiers qui ne fournit aucun WSDL ni ASMX. L'URL du service est simplement http: //server/service.soap
J'ai lu - cet article À propos des appels de services bruts, mais je ne sais pas si c'est ce que je cherche.
En outre, j'ai demandé des fichiers WSDL, mais on dit qu'il n'y en a pas (et il n'y aura pas).
J'utilise C # avec .NET 2.0 et je ne peux pas passer à 3.5 (donc pas de WCF). Je pense que ce tiers utilise Java, car c'est l'exemple qu'ils ont fourni.
Merci d'avance!
[~ # ~] Mise à jour [~ # ~] Obtenez cette réponse lors de la navigation sur l'URL:
<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>
Cannot find a Body tag in the enveloppe
</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Eh bien, j'ai enfin eu ceci pour travailler, alors je vais écrire ici le code que j'utilise. (N'oubliez pas que .NET 2.0 et pas de WSDL pour obtenir du service Web).
Tout d'abord, nous créons un httpwebrequest:
public static HttpWebRequest CreateWebRequest(string url)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Headers.Add("SOAP:Action");
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
return webRequest;
}
Ensuite, nous appelons un appel au Webservice en passant sur toutes les valeurs nécessaires. En lisant l'enveloppe SOAP à partir d'un document XML, je vais gérer les données comme un stringdiction. Devrait être une meilleure façon de le faire, mais j'y penserai plus tard:
public static XmlDocument ServiceCall(string url, int service, StringDictionary data)
{
HttpWebRequest request = CreateWebRequest(url);
XmlDocument soapEnvelopeXml = GetSoapXml(service, data);
using (Stream stream = request.GetRequestStream())
{
soapEnvelopeXml.Save(stream);
}
IAsyncResult asyncResult = request.BeginGetResponse(null, null);
asyncResult.AsyncWaitHandle.WaitOne();
string soapResult;
using (WebResponse webResponse = request.EndGetResponse(asyncResult))
using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
{
soapResult = rd.ReadToEnd();
}
File.WriteAllText(HttpContext.Current.Server.MapPath("/servicios/" + DateTime.Now.Ticks.ToString() + "assor_r" + service.ToString() + ".xml"), soapResult);
XmlDocument resp = new XmlDocument();
resp.LoadXml(soapResult);
return resp;
}
Donc, c'est tout. Si quelqu'un pense que GetsOapXML doit être ajouté à la réponse, je vais l'écrire.
À mon avis, il n'y a pas d'excuse pour A SOAP Service Web pour ne pas fournir de WSDL. Il n'est pas nécessaire de générer de manière dynamique par le service; il n'est pas nécessaire de ne pas être disponible sur Internet. Mais là-bas - Doit être un WSDL, même s'ils doivent vous l'envoyer sur un disquette Thumb Drive!
Si vous avez une capacité à vous plaindre aux fournisseurs de ce service, je vous exhorte à le faire. Si vous avez la capacité de repousser, alors faites-le. Idéalement, commuter les fournisseurs de services et dire à ces personnes, c'est parce qu'ils n'ont pas fourni de WSDL. À tout le moins, découvrez pourquoi ils ne pensent pas que c'est important.
Si vous avez de la chance, vous pouvez toujours obtenir le WSDL. Certains cadres de service Web vous permettent de récupérer une WSDL générée dynamiquement.
Services Web écrits avec Axis1.x vous permettent de récupérer un fichier WSDL généré de manière dynamique en naviguant à l'URL.
Vient de parcourir
http://server/service.soap/?wsdl
Je ne sais pas si cela est possible avec d'autres cadres.
Hmm, délicat ici mais pas impossible mais je ferai de mon mieux pour l'expliquer.
Ce que vous aurez besoin de faire est
Je vais essayer d'ajouter plus comme et quand j'y pense, mais cela devrait être suffisant pour vous aider à démarrer.