Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menghantar dan Menerima Permintaan SOAP dalam C#?

Bagaimana untuk Menghantar dan Menerima Permintaan SOAP dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-24 06:36:10627semak imbas

How to Send and Receive SOAP Requests in C#?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn