C#을 사용하여 SOAP 요청 보내기 및 받기
이 문서에서는 SOAP 요청을 웹 서비스에 보내고 해당 응답을 기다리는 C# 클라이언트(Windows 서비스로 개발)를 만드는 방법을 설명합니다.
자세한 코드 설명
다음 코드 예제는 SOAP 요청과 해당 응답을 생성하는 방법을 보여줍니다.
<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>
이 예에서는:
CreateSoapEnvelope()
요청된 SOAP 봉투를 생성합니다. CreateWebRequest()
적절한 헤더와 구성으로 웹 요청을 설정합니다. InsertSoapEnvelopeIntoWebRequest()
요청에 SOAP 봉투를 삽입합니다. BeginGetResponse()
및 EndGetResponse()
은 비동기 SOAP 요청 처리에 사용됩니다. 또 다른 구현 제안
또 다른 일반적인 접근 방식은 WebRequest
및 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>
이 구현은 SOAP 요청을 처리하는 보다 직접적인 방법을 제공합니다.
위 내용은 C#에서 SOAP 요청을 보내고 받는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!