You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建可接收XML的C# Web Service?求入门教程

嘿,作为新手能写出基础的Web Service已经很棒啦!要让它接收你指定格式的XML其实很简单,咱们分三步来做:

第一步:创建匹配XML结构的C#数据模型

.NET可以自动把XML转换成C#对象(反序列化),所以首先得根据你的XML结构定义对应的类,用XML序列化特性来映射节点和属性:

using System.Collections.Generic;
using System.Xml.Serialization;

// 对应根节点<Root>
[XmlRoot("Root")]
public class Root
{
    // 对应<WorkOrder>节点
    [XmlElement("WorkOrder")]
    public WorkOrder WorkOrder { get; set; }
}

public class WorkOrder
{
    // 对应WorkOrder的StatusCode属性
    [XmlAttribute("StatusCode")]
    public int StatusCode { get; set; }

    // 对应WorkOrder的ID属性
    [XmlAttribute("ID")]
    public long ID { get; set; }

    [XmlElement("JobTypeID")]
    public int JobTypeID { get; set; }

    [XmlElement("JobTypeDesc")]
    public string JobTypeDesc { get; set; }

    [XmlElement("AccessRestrictions")]
    public string AccessRestrictions { get; set; }

    [XmlElement("TenantName")]
    public string TenantName { get; set; }

    [XmlElement("TenantHomeTel")]
    public string TenantHomeTel { get; set; }

    [XmlElement("TenantMobTel")]
    public string TenantMobTel { get; set; }

    // 允许空节点<TenantWorkTel/>
    [XmlElement("TenantWorkTel")]
    public string TenantWorkTel { get; set; }

    // 对应<OrderLines>下的多个<OrderLine>节点
    [XmlArray("OrderLines")]
    [XmlArrayItem("OrderLine")]
    public List<OrderLine> OrderLines { get; set; }

    // 对应<Vulnerabilities>下的<Vulnerability>节点
    [XmlArray("Vulnerabilities")]
    [XmlArrayItem("Vulnerability")]
    public List<string> Vulnerabilities { get; set; }
}

public class OrderLine
{
    [XmlAttribute("ID")]
    public long ID { get; set; }

    [XmlElement("OrderLineVariedFrom")]
    public string OrderLineVariedFrom { get; set; }

    [XmlElement("Status")]
    public int Status { get; set; }

    [XmlElement("TradeID")]
    public int TradeID { get; set; }
}
第二步:扩展你的Web Service,添加接收XML的方法

现在把这个模型加到你的Web Service里,新增一个ProcessWorkOrder的WebMethod,参数就是咱们定义的Root类,这样.NET会自动处理XML的反序列化:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Calculator : System.Web.Services.WebService
{
    public Calculator()
    {
        //Uncomment the following line if using designed components
        //InitializeComponent();
    }

    [WebMethod]
    public long Add(long x, long y)
    {
        return x + y;
    }

    // 新增的接收XML的方法
    [WebMethod]
    public string ProcessWorkOrder(Root workOrderData)
    {
        // 这里可以处理接收到的数据,比如打印、保存到数据库等
        // 举个简单例子:返回确认信息
        if (workOrderData?.WorkOrder != null)
        {
            return $"成功接收工单ID:{workOrderData.WorkOrder.ID},包含{workOrderData.WorkOrder.OrderLines.Count}条工单明细";
        }
        return "未接收到有效工单数据";
    }
}
第三步:测试你的Web Service

部署好Web Service后,你可以用工具(比如Postman、SOAP UI)来发送XML请求:

  • 请求地址:比如http://localhost/YourWebService/Calculator.asmx/ProcessWorkOrder
  • 请求方法:POST
  • 请求头:设置Content-Type: text/xml; charset=utf-8
  • 请求体需要包裹在SOAP信封里(ASP.NET Web Service默认用SOAP),示例如下:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ProcessWorkOrder xmlns="http://tempuri.org/">
      <workOrderData>
        <WorkOrder StatusCode="0" ID="1572058">
          <JobTypeID>2339</JobTypeID>
          <JobTypeDesc>HELPLINE (2339)</JobTypeDesc>
          <AccessRestrictions>Avoid School Run</AccessRestrictions>
          <TenantName>MRS M JOHN &amp; MR A GREY</TenantName>
          <TenantHomeTel>01234567890</TenantHomeTel>
          <TenantMobTel>1213</TenantMobTel>
          <TenantWorkTel/>
          <OrderLines>
            <OrderLine ID="4884180">
              <OrderLineVariedFrom/>
              <Status>0</Status>
              <TradeID>2315</TradeID>
            </OrderLine>
            <OrderLine ID="4884181">
              <OrderLineVariedFrom/>
              <Status>0</Status>
              <TradeID>2380</TradeID>
            </OrderLine>
          </OrderLines>
          <Vulnerabilities>
            <Vulnerability>3645</Vulnerability>
          </Vulnerabilities>
        </WorkOrder>
      </workOrderData>
    </ProcessWorkOrder>
  </soap:Body>
</soap:Envelope>

发送请求后,你就能收到Web Service返回的确认信息啦~

内容的提问来源于stack exchange,提问作者kas_miyulu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:56:55