C# 如何处理soap协议中的xml报文

煙雲
发布: 2025-10-27 12:16:01
原创
272人浏览过
答案:C#处理SOAP协议主要通过WCF自动生成客户端或手动构造XML报文。1. 推荐使用“添加服务引用”根据WSDL生成代理类,自动完成序列化;2. 需精细控制时可手动构建SOAP请求,利用HttpWebRequest发送并解析响应;3. 使用XmlDocument或XDocument操作报文内容,注意命名空间匹配;4. 可配置messageLogging记录日志,便于调试实际传输的SOAP消息。

c# 如何处理soap协议中的xml报文

C# 处理 SOAP 协议中的 XML 报文,通常用于调用 Web Service 接口。SOAP 是基于 XML 的通信协议,C# 提供了多种方式来处理这些报文,无论是自动封装还是手动解析发送。以下是几种常用方法和关键点说明。

使用 WCF 或添加服务引用自动生成客户端

这是最常见且推荐的方式,适用于标准的 ASMX 或 WCF Web Service。

  • 在 Visual Studio 中右键项目 → “添加” → “连接的服务” 或 “添加服务引用”。
  • 输入 Web Service 的 WSDL 地址(如:https://www.php.cn/link/955fda27a2b8c63b1a738968656ce939?wsdl)。
  • 工具会自动生成代理类,包含方法、数据类型和底层 SOAP 消息封装逻辑。
  • 调用方法时,C# 自动将参数序列化为 SOAP XML 并发送,响应也会反序列化为对象。

例如:

var client = new ServiceReference1.MyServiceClient();
var response = client.GetData(123); // 自动处理 SOAP 封装
登录后复制

手动构造和解析 SOAP XML 报文

当需要精细控制报文内容(如添加 Header、兼容老旧接口),可手动构建 SOAP 请求。

  • 使用 HttpWebRequest 发送原始 SOAP 消息。
  • 准备符合规范的 SOAP Envelope XML 字符串。
  • 设置请求头 Content-Type 为 text/xml; charset=utf-8,SOAPAction 正确指向目标操作。
  • 通过 Stream 写入 XML,读取响应流并解析返回的 XML。

示例代码片段:

讯飞听见会议
讯飞听见会议

科大讯飞推出的AI智能会议系统

讯飞听见会议 19
查看详情 讯飞听见会议
string soapRequest = @"<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>
  <soap:Body>
    <GetData xmlns='http://tempuri.org/'>
      <id>123</id>
    </GetData>
  </soap:Body>
</soap:Envelope>";
<p>var request = (HttpWebRequest)WebRequest.Create("<a href="https://www.php.cn/link/955fda27a2b8c63b1a738968656ce939">https://www.php.cn/link/955fda27a2b8c63b1a738968656ce939</a>");
request.Method = "POST";
request.ContentType = "text/xml; charset=utf-8";
request.Headers.Add("SOAPAction", "<a href="https://www.php.cn/link/1b159dc50cad7253d6c91bc03c2bf33c">https://www.php.cn/link/1b159dc50cad7253d6c91bc03c2bf33c</a>");</p><p>using (var stream = request.GetRequestStream())
{
byte[] bytes = Encoding.UTF8.GetBytes(soapRequest);
stream.Write(bytes, 0, bytes.Length);
}</p><p>using (var response = (HttpWebResponse)request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
string resultXml = reader.ReadToEnd();
// 使用 XmlDocument 或 XDocument 解析 resultXml
}
登录后复制

使用 XmlDocument 或 XDocument 处理报文内容

在构造或解析 SOAP 响应时,常配合 XML 操作类。

  • XmlDocument:基于 DOM,适合小到中等大小的报文,支持 XPath 查询。
  • XDocument(LINQ to XML):更现代,语法简洁,适合构造和查询。
  • 注意命名空间处理,SOAP 和服务定义的命名空间必须正确匹配。

例如提取响应中的某个字段:

XDocument doc = XDocument.Parse(resultXml);
XNamespace ns = "http://tempuri.org/";
var value = doc.Descendants(ns + "GetDataResult").FirstOrDefault()?.Value;
登录后复制

启用消息日志以调试 SOAP 报文

开发过程中若需查看实际发送/接收的 XML,可开启 WCF 跟踪。

  • app.config 或 web.config 中配置 <system.diagnostics><messageLogging>
  • 日志会记录完整的 SOAP 请求和响应,便于排查格式或数据问题。

基本上就这些。根据项目需求选择合适方式:大多数情况推荐自动生成客户端;特殊场景再手动处理 XML。关键是理解 SOAP 结构和命名空间的作用。

以上就是C# 如何处理soap协议中的xml报文的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号