J'ai finalement réussi à faire fonctionner ce système, et je vais donc écrire ici le code que j'utilise. (Rappelez-vous, .Net 2.0, et pas de wsdl à 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 le webservice en lui transmettant toutes les valeurs nécessaires. Comme je lis l'enveloppe de savon à partir d'un document xml, je vais traiter les données comme un StringDictionary. Il devrait y avoir une meilleure façon de faire, mais j'y réfléchirai 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;
}
Voilà, c'est tout. Si quelqu'un pense que GetSoapXml doit être ajouté à la réponse, je le noterai.