Hantar dan terima permintaan SOAP menggunakan C#
Artikel ini menerangkan cara membuat klien C# (dibangunkan sebagai perkhidmatan Windows) yang menghantar permintaan SOAP kepada perkhidmatan web dan menunggu respons yang sepadan.
Penjelasan kod terperinci
Contoh kod berikut menunjukkan cara membuat permintaan SOAP dan respons yang sepadan:
<code class="language-csharp">using System.Xml; using System.Net; using System.IO; public static void CallWebService() { string url = "http://xxxxxxxxx/Service1.asmx"; string action = "http://xxxxxxxx/Service1.asmx?op=HelloWorld"; XmlDocument soapEnvelopeXml = CreateSoapEnvelope(); HttpWebRequest webRequest = CreateWebRequest(url, action); InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest); webRequest.BeginGetResponse(null, null).AsyncWaitHandle.WaitOne(); // 开始异步调用 Web 请求。 string soapResult; using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult)) { using (StreamReader rd = new StreamReader(webResponse.GetResponseStream())) { soapResult = rd.ReadToEnd(); } Console.Write(soapResult); } } private static HttpWebRequest CreateWebRequest(string url, string action) { HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Headers.Add("SOAPAction", action); webRequest.ContentType = "text/xml;charset=\"utf-8\""; webRequest.Accept = "text/xml"; webRequest.Method = "POST"; return webRequest; } private static XmlDocument CreateSoapEnvelope() { XmlDocument soapEnvelopeDocument = new XmlDocument(); soapEnvelopeDocument.LoadXml( //... (XML 定义已省略) return soapEnvelopeDocument; } private static void InsertSoapEnvelopeIntoWebRequest(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest) { using (Stream stream = webRequest.GetRequestStream()) { soapEnvelopeXml.Save(stream); } }</code>
Dalam contoh ini:
CreateSoapEnvelope()
Mencipta sampul SOAP yang diminta. CreateWebRequest()
Sediakan permintaan web dengan pengepala dan konfigurasi yang sesuai. InsertSoapEnvelopeIntoWebRequest()
Masukkan sampul SOAP ke dalam permintaan. BeginGetResponse()
dan EndGetResponse()
digunakan untuk pengendalian permintaan SOAP tak segerak. Satu lagi cadangan pelaksanaan
Satu lagi pendekatan biasa melibatkan penggunaan kelas WebRequest
dan WebResponse
:
<code class="language-csharp">protected virtual WebRequest CreateRequest(ISoapMessage soapMessage) { WebRequest wr = WebRequest.Create(soapMessage.Uri); wr.ContentType = "text/xml;charset=utf-8"; wr.ContentLength = soapMessage.ContentXml.Length; wr.Headers.Add("SOAPAction", soapMessage.SoapAction); wr.Credentials = soapMessage.Credentials; wr.Method = "POST"; wr.GetRequestStream().Write(Encoding.UTF8.GetBytes(soapMessage.ContentXml), 0, soapMessage.ContentXml.Length); return wr; } public interface ISoapMessage { string Uri { get; } string ContentXml { get; } string SoapAction { get; } ICredentials Credentials { get; } }</code>
Pelaksanaan ini menyediakan cara yang lebih langsung untuk mengendalikan permintaan SOAP.
Atas ialah kandungan terperinci Bagaimana untuk Menghantar dan Menerima Permintaan SOAP dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!