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
Lepaskan: 2025-01-24 06:36:10
asal
602 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan