如何创建可接收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 & 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
相关产品推荐
相关产品推荐

