SOAP-Anfragen mit C# senden und empfangen
In diesem Artikel wird beschrieben, wie Sie einen C#-Client (entwickelt als Windows-Dienst) erstellen, der eine SOAP-Anfrage an einen Webdienst sendet und auf die entsprechende Antwort wartet.
Detaillierte Code-Erklärung
Das folgende Codebeispiel zeigt, wie eine SOAP-Anfrage und die entsprechende Antwort erstellt werden:
<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>
In diesem Beispiel:
CreateSoapEnvelope()
Erstellt den angeforderten SOAP-Umschlag. CreateWebRequest()
Richten Sie Webanfragen mit geeigneten Headern und Konfiguration ein. InsertSoapEnvelopeIntoWebRequest()
Fügen Sie einen SOAP-Umschlag in die Anfrage ein. BeginGetResponse()
und EndGetResponse()
werden für die asynchrone SOAP-Anfrageverarbeitung verwendet. Noch ein Umsetzungsvorschlag
Ein weiterer gängiger Ansatz ist die Verwendung der Klassen WebRequest
und 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>
Diese Implementierung bietet eine direktere Möglichkeit, SOAP-Anfragen zu verarbeiten.
Das obige ist der detaillierte Inhalt vonWie sende und empfange ich SOAP-Anfragen in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!