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

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

Susan Sarandon
Susan SarandonOriginal
2025-01-24 06:47:15302Durchsuche

How to Send and Receive SOAP Requests and Responses in C#?

Senden von SOAP-Anfragen und Empfangen von Antworten in C

Problem

Sie müssen einen C#-Client erstellen, der SOAP-Anfragen an einen Webdienst sendet und empfängt die Antworten.

Lösung

Hier ist ein Codeausschnitt, der zeigt, wie dies erreicht wird:

using System.Net;
using System.IO;
using System.Xml;

public static void CallWebService()
{
    // Replace with your SOAP endpoint URL
    var url = "http://example.com/service.asmx";
    // Replace with your SOAP action
    var action = "http://example.com/service.asmx?op=HelloWorld";

    var soapEnvelope = CreateSoapEnvelope();
    var webRequest = CreateWebRequest(url, action);
    InsertSoapEnvelopeIntoWebRequest(soapEnvelope, webRequest);

    // Send the SOAP request
    var asyncResult = webRequest.BeginGetResponse(null, null);
    asyncResult.AsyncWaitHandle.WaitOne();

    // Receive the SOAP response
    var soapResponse = "";
    using (var webResponse = webRequest.EndGetResponse(asyncResult))
    {
        using (var reader = new StreamReader(webResponse.GetResponseStream()))
        {
            soapResponse = reader.ReadToEnd();
        }
    }
}

private static HttpWebRequest CreateWebRequest(string url, string action)
{
    var 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()
{
    var soapEnvelope = new XmlDocument();
    soapEnvelope.LoadXml(
        $@"<SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/""
               xmlns:xsi=""http://www.w3.org/1999/XMLSchema-instance"" 
               xmlns:xsd=""http://www.w3.org/1999/XMLSchema"">
          <SOAP-ENV:Body>
            <HelloWorld xmlns=""http://tempuri.org/""
                SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/"">
                <int1 xsi:type=""xsd:integer"">12</int1>
                <int2 xsi:type=""xsd:integer"">32</int2>
            </HelloWorld>
          </SOAP-ENV:Body>
        </SOAP-ENV:Envelope>");
    return soapEnvelope;
}

private static void InsertSoapEnvelopeIntoWebRequest(XmlDocument soapEnvelope, HttpWebRequest webRequest)
{
    using (var stream = webRequest.GetRequestStream())
    {
        soapEnvelope.Save(stream);
    }
}

Dieser Code erstellt eine Webanfrage, legt den SOAP-Aktionsheader fest und fügt den SOAP-Umschlag in die Anfrage ein. Anschließend wird die Anfrage gesendet und die SOAP-Antwort gelesen.

Das obige ist der detaillierte Inhalt vonWie sende und empfange ich SOAP-Anfragen und -Antworten 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