En lille forklaring af c# kode vedr. soap
HejJeg har en ellers fin bog omkring .net og xml og jeg har læst en gennemgang om at sende en SOAP request via min C# kode og jeg har skrevet følgende udfra bogen, men noget af det er lidt uklart for mig, kan nogen hjælpe ? Se bemærkninger for de enkelte metoder..
Koden kommer her...
private const string soapNS = "http://schemas.xmlsoap.org/soap/envelope/";
//Denne har jeg rimelig styr på :-)
public static string CreateSoapEnvelope()
{
string soap = "";
MemoryStream stream = new MemoryStream();
XmlTextWriter wr = new XmlTextWriter(stream, Encoding.UTF8);
wr.WriteStartDocument();
wr.WriteStartElement("soap", "Envelope", soapNS);
wr.WriteStartElement("Body", soapNS);
//her skal der komme flere tags.....
wr.WriteEndElement(); // soap:Body
wr.WriteEndElement();//soap:Envelope
wr.WriteEndDocument();
wr.Flush();
stream.Seek(0,SeekOrigin.Begin);
StreamReader reader = new StreamReader(stream);
soap = reader.ReadToEnd();
return soap;
}
//Denne er også rimelig klar
public static HttpWebRequest CreateWebRequest(int length)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ConfReader.VansURL);
request.Method = "POST";
request.ContentType = "text/xml; charset=" + Encoding.UTF8.HeaderName;
request.ContentLength = length;
request.Headers["SOAPAction"] = //Her kommer en URL;
return request;
}
//Hvad er det lige der sker her ???????
public static void DoSomethingIdontKnow(HttpWebRequest r, string s)
{
StreamWriter streamWriter = new StreamWriter(r.GetRequestStream());
streamWriter.Write(s);
streamWriter.Flush();
}
//Her får jeg en besked tilbage fra webservicen og tjekker om det er gået godt.....metoden er ikke skrevet færdig....
public static void HandleResponse(HttpWebRequest r)
{
WebResponse response = r.GetResponse();
Stream responseStream = response.GetResponseStream();
System.Xml.XPath.XPathDocument document = new System.Xml.XPath.XPathDocument(responseStream);
System.Xml.XPath.XPathNavigator nav = document.CreateNavigator();
System.Xml.XPath.XPathNodeIterator nodes = nav.Select("//Envelope/Body/....");
//Write something to log
}
public static void Main(string [] args)
{
string soap = CreateSoapEnvelope();
HttpWebRequest r = CreateWebRequest(soap.Length);
DoSomethingIdontKnow(r, soap);
HandleResponse(r);
}
