📜  httpclientsoap请求c#(1)

📅  最后修改于: 2023-12-03 15:01:20.296000             🧑  作者: Mango

使用HttpClient和SOAP请求C#服务

在C#中,我们可以通过SOAP协议来进行跨平台的Web服务调用。而HttpClient则是在.NET中广泛使用的轻量级HTTP客户端库,可以用来发起HTTP请求以及处理响应。

在本文中,我们将讲解如何使用HttpClient库来发起SOAP请求并解析响应。

1. 添加HttpClient库

要使用HttpClient库,我们首先需要添加它到我们的项目中。可以使用NuGet包管理器或手动下载并添加到项目中。

使用NuGet包管理器,可以在Visual Studio中执行以下操作:

  1. 打开“解决方案资源管理器”。
  2. 选择项目,并右键单击它。
  3. 在弹出菜单中选择“管理NuGet软件包”。
  4. 在“浏览”选项卡中,搜索“HttpClient”。
  5. 选择最新版本并单击“安装”。

手动添加库时,可以按以下步骤进行:

  1. 打开https://github.com/dotnet/corefx/tree/master/src/System.Net.Http/下载HttpClient的源代码。
  2. 打开Visual Studio,右键单击项目,在“解决方案资源管理器”中选择“添加” > “现有项”。
  3. 浏览下载的文件夹并选择HttpClient的源代码文件。
  4. 单击“添加”。
2. 发起SOAP请求

下面的示例代码演示了如何使用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);
    }
}
3. 解析SOAP响应

在上一节中,我们已经成功发送了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);
4. 结论

使用HttpClient类可以轻松地与SOAP服务进行通信,并且可以通过解析XML响应来提取所需的数据。在实际应用中,我们需要根据服务的具体要求来构建SOAP请求体,同时需要注意请求头的配置和响应的解析。