Heim >Backend-Entwicklung >C++ >Wie sende und empfange ich SOAP-Anfragen in C#?

Wie sende und empfange ich SOAP-Anfragen in C#?

Linda Hamilton
Linda HamiltonOriginal
2025-01-24 06:36:10565Durchsuche

How to Send and Receive SOAP Requests in C#?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn