📅  最后修改于: 2023-12-03 15:01:20.296000             🧑  作者: Mango
在C#中,我们可以通过SOAP协议来进行跨平台的Web服务调用。而HttpClient则是在.NET中广泛使用的轻量级HTTP客户端库,可以用来发起HTTP请求以及处理响应。
在本文中,我们将讲解如何使用HttpClient库来发起SOAP请求并解析响应。
要使用HttpClient库,我们首先需要添加它到我们的项目中。可以使用NuGet包管理器或手动下载并添加到项目中。
使用NuGet包管理器,可以在Visual Studio中执行以下操作:
手动添加库时,可以按以下步骤进行:
下面的示例代码演示了如何使用HttpClient类发起SOAP请求。本示例使用的是.NET的服务,但是同样的方法适用于其他服务,只需要将SOAP请求的XML负载替换为特定服务所需的负载即可。
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
// 创建HTTP客户端
var client = new HttpClient();
// 配置客户端请求头
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));
// 构建SOAP请求内容XML
XNamespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
XNamespace web = "http://tempuri.org/";
var xmlString = new XElement(soapenv + "Envelope",
new XAttribute(XNamespace.Xmlns + "soapenv", soapenv),
new XElement(soapenv + "Body",
new XElement(web + "GetUserName",
new XElement(web + "userID", "1234")))).ToString();
// 创建HTTP请求消息
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost:8080/service.asmx")
{
Content = new StringContent(xmlString, Encoding.UTF8, "text/xml")
};
// 发送请求并获取响应消息
var response = client.SendAsync(request).Result;
// 读取响应内容并输出到控制台
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
}
在上一节中,我们已经成功发送了SOAP请求并获取到了响应。但是,响应内容是一个XML文档,需要我们解析后才能获取其中的数据。
本节将演示如何解析SOAP响应XML并获取其中的信息。
// 发送请求并获取响应消息
var response = client.SendAsync(request).Result;
// 读取响应内容并解析XML
var responseContent = response.Content.ReadAsStringAsync().Result;
var xmlResponse = XDocument.Parse(responseContent);
// 读取响应中的用户名元素并输出到控制台
XNamespace ns = "http://tempuri.org/";
var userNameElement = xmlResponse.Descendants(ns + "GetUserNameResponse").Descendants(ns + "GetUserNameResult").FirstOrDefault();
Console.WriteLine(userNameElement?.Value);
使用HttpClient类可以轻松地与SOAP服务进行通信,并且可以通过解析XML响应来提取所需的数据。在实际应用中,我们需要根据服务的具体要求来构建SOAP请求体,同时需要注意请求头的配置和响应的解析。