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

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

Linda Hamilton
Freigeben: 2025-01-24 06:36:10
Original
564 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage