如何:使用 XML 序列化自定义 SOAP 消息

本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation.

System.Web.Serialization 命名空间提供了大量用于控制 XML 序列化且适用于 Web 服务方法的参数和返回值的特性。本主题演示如何使用 XmlElementAttribute 特性。

指定表示某个参数的 XML 元素的名称

  1. 向该参数应用 XmlElement 特性,此特性可为元素指定所需的名称,如果该参数的格式设置为 Literal,它还可以指定命名空间的名称。如果该参数的格式设置为 Encoded,则应向该参数应用 SoapElement 特性。

    下面的代码示例要求表示参数的元素名称为 MyAddressElementMyZipElementReturnValueElement。此外,它还要求表示返回值的元素名称为 ReturnValueElement。在该示例中,Web 服务方法的格式为 Document,这是 ASP.NET 的默认设置。

    <%@ WebService Language="C#" Class="SoapDocumentServiceSample" %>
     using System.Web.Services;
     using System.Web.Services.Protocols;
     using System.Xml.Serialization;
    
    [WebService(Namespace="https://www.contoso.com")] 
    public class SoapDocumentServiceSample  
    {
      [ WebMethod ]
      [ return: XmlElement("ReturnValueElement",IsNullable=false)]
      public Address ValidateAddress(
        [XmlElement("MyAddressElement")] Address MyAddress,
        [XmlElement("MyZipElement")] bool useZipPlus4) 
      {
        useZipPlus4 = true;    
        return new Address();
      }
    }
    
    <%@ WebService Language="VB" Class="SoapDocumentServiceSample" %>
     Imports System.Web.Services
     Imports System.Web.Services.Protocols
     Imports System.Xml.Serialization
    
    <WebService(Namespace := "https://www.contoso.com")> _
    Public Class SoapDocumentServiceSample
      < WebMethod > _
      Public Function ValidateAddress( _
           <XmlElement("MyAddressElement")> MyAddress As Address, _
           <XmlElement("MyZipElement")> useZipPlus4 As Boolean)  
           As <XmlElement("ReturnValueElement",IsNullable :=false)> _
           Address 
            useZipPlus4 = True 
         Return new Address()
      End Function
    End Class
    

    Web 服务应收到以下 SOAP 请求。请注意元素名称与 XmlElement 特性中指定的哪些内容匹配,它们与参数名称之间存在哪些差别。

    <?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="https://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <ValidateAddress xmlns="http://tempuri.org/">
          <MyAddressElement>
            <Street>string</Street>
            <City>string</City>
            <Zip>string</Zip>
          </MyAddressElement>
          <MyZipElement>boolean</MyZipElement>
        </ValidateAddress>
      </soap:Body>
    </soap:Envelope>
    

另请参见

参考

System.Xml.Serialization Namespace
SoapDocumentMethodAttribute
SoapRpcMethodAttribute
SoapDocumentServiceAttribute
SoapRpcServiceAttribute

概念

使用 SOAP 扩展修改 SOAP 消息
生成 XML Web services 客户端

其他资源

自定义 SOAP 消息的格式设置
Introducing XML Serialization
使用 ASP.NET 的 XML Web services