Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
XML-serialisering är den underliggande transportmekanismen som används i XML-webbtjänstarkitekturen XmlSerializer , som utförs av klassen. Om du vill styra XML-koden som genereras av en XML-webbtjänst kan du använda attributen som anges i både Attribut som styr XML-serialisering och attribut som styr kodad SOAP-serialisering för klasserna, returnera värden, parametrar och fält i en fil som används för att skapa en XML-webbtjänst (.asmx). Mer information om hur du skapar en XML-webbtjänst finns i XML-webbtjänster med ASP.NET.
Literala och kodade formatmallar
XML-koden som genereras av en XML-webbtjänst kan formateras på något av två sätt, antingen literal eller kodad, enligt beskrivningen i Anpassa SOAP-meddelandeformatering. Därför finns det två uppsättningar attribut som styr XML-serialisering. Attributen som anges i Attribut som styr XML-serialisering är utformade för att styra literalt XML-format. Attributen som anges i Attribut som styr kodad SOAP-serialisering styr det kodade formatet. Genom att selektivt tillämpa dessa attribut kan du skräddarsy ett program för att returnera antingen eller båda formatmallarna. Dessutom kan dessa attribut tillämpas (efter behov) för att returnera värden och parametrar.
Exempel på att använda båda formatmallarna
När du skapar en XML-webbtjänst kan du använda båda uppsättningarna attribut på metoderna. I följande kodexempel innehåller klassen med namnet MyService två XML-webbtjänstmetoder och MyLiteralMethodMyEncodedMethod. Båda metoderna utför samma funktion: returnerar en instans av Order klassen.
Order I klassen är attributen XmlTypeAttribute och SoapTypeAttribute båda tillämpade på fältet OrderID, och båda attributen har sin ElementName-egenskap inställd på olika värden.
Om du vill köra exemplet klistrar du in koden i en fil med ett .asmx-tillägg och placerar filen i en virtuell katalog som hanteras av IIS (Internet Information Services). Från en webbläsare skriver du namnet på datorn, den virtuella katalogen och filen.
<%@ WebService Language="VB" Class="MyService" %>
Imports System
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Xml.Serialization
Public Class Order
' Both types of attributes can be applied. Depending on which type
' the method used, either one will affect the call.
<SoapElement(ElementName:= "EncodedOrderID"), _
XmlElement(ElementName:= "LiteralOrderID")> _
public OrderID As String
End Class
Public Class MyService
<WebMethod, SoapDocumentMethod> _
public Function MyLiteralMethod() As Order
Dim myOrder As Order = New Order()
return myOrder
End Function
<WebMethod, SoapRpcMethod> _
public Function MyEncodedMethod() As Order
Dim myOrder As Order = New Order()
return myOrder
End Function
End Class
<%@ WebService Language="C#" Class="MyService" %>
using System;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Serialization;
public class Order {
// Both types of attributes can be applied. Depending on which type
// the method used, either one will affect the call.
[SoapElement(ElementName = "EncodedOrderID")]
[XmlElement(ElementName = "LiteralOrderID")]
public String OrderID;
}
public class MyService {
[WebMethod][SoapDocumentMethod]
public Order MyLiteralMethod(){
Order myOrder = new Order();
return myOrder;
}
[WebMethod][SoapRpcMethod]
public Order MyEncodedMethod(){
Order myOrder = new Order();
return myOrder;
}
}
I följande kodexempel anropas MyLiteralMethod. Elementnamnet ändras till "LiteralOrderID".
<?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>
<MyLiteralMethodResponse xmlns="http://tempuri.org/">
<MyLiteralMethodResult>
<LiteralOrderID>string</LiteralOrderID>
</MyLiteralMethodResult>
</MyLiteralMethodResponse>
</soap:Body>
</soap:Envelope>
I följande kodexempel anropas MyEncodedMethod. Elementnamnet är "EncodedOrderID".
<?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:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://tempuri.org/" xmlns:types="http://tempuri.org/encodedTypes" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<tns:MyEncodedMethodResponse>
<MyEncodedMethodResult href="#id1" />
</tns:MyEncodedMethodResponse>
<types:Order id="id1" xsi:type="types:Order">
<EncodedOrderID xsi:type="xsd:string">string</EncodedOrderID>
</types:Order>
</soap:Body>
</soap:Envelope>
Använda attribut för att returnera värden
Du kan också använda attribut för att returnera värden för att styra namnområdet, elementnamnet och så vidare. I följande kodexempel tillämpas XmlElementAttribute attributet på metodens MyLiteralMethod returvärde. På så sätt kan du styra namnområdet och elementnamnet.
<WebMethod, SoapDocumentMethod> _
public Function MyLiteralMethod() As _
<XmlElement(Namespace:="http://www.cohowinery.com", _
ElementName:= "BookOrder")> _
Order
Dim myOrder As Order = New Order()
return myOrder
End Function
[return: XmlElement(Namespace = "http://www.cohowinery.com",
ElementName = "BookOrder")]
[WebMethod][SoapDocumentMethod]
public Order MyLiteralMethod(){
Order myOrder = new Order();
return myOrder;
}
När den anropas returnerar koden XML som liknar följande.
<?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>
<MyLiteralMethodResponse xmlns="http://tempuri.org/">
<BookOrder xmlns="http://www.cohowinery.com">
<LiteralOrderID>string</LiteralOrderID>
</BookOrder>
</MyLiteralMethodResponse>
</soap:Body>
</soap:Envelope>
Attribut som tillämpas på parametrar
Du kan också använda attribut för parametrar för att ange namnområde, elementnamn och så vidare. I följande kodexempel läggs en parameter till i MyLiteralMethodResponse metoden och XmlAttributeAttribute attributet tillämpas på parametern. Både elementnamnet och namnområdet anges för parametern.
<WebMethod, SoapDocumentMethod> _
public Function MyLiteralMethod(<XmlElement _
("MyOrderID", Namespace:="http://www.microsoft.com")>ID As String) As _
<XmlElement(Namespace:="http://www.cohowinery.com", _
ElementName:= "BookOrder")> _
Order
Dim myOrder As Order = New Order()
myOrder.OrderID = ID
return myOrder
End Function
[return: XmlElement(Namespace = "http://www.cohowinery.com",
ElementName = "BookOrder")]
[WebMethod][SoapDocumentMethod]
public Order MyLiteralMethod([XmlElement("MyOrderID",
Namespace="http://www.microsoft.com")] string ID){
Order myOrder = new Order();
myOrder.OrderID = ID;
return myOrder;
}
SOAP-begäran skulle likna följande.
<?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>
<MyLiteralMethod xmlns="http://tempuri.org/">
<MyOrderID xmlns="http://www.microsoft.com">string</MyOrderID>
</MyLiteralMethod>
</soap:Body>
</soap:Envelope>
Tillämpa attribut på klasser
Om du behöver styra namnområdet för element som korrelerar med klasser kan du tillämpa XmlTypeAttribute, XmlRootAttributeoch SoapTypeAttribute, efter behov. Följande kodexempel gäller alla tre för Order klassen.
<XmlType("BigBookService"), _
SoapType("SoapBookService"), _
XmlRoot("BookOrderForm")> _
Public Class Order
' Both types of attributes can be applied. Depending on which
' the method used, either one will affect the call.
<SoapElement(ElementName:= "EncodedOrderID"), _
XmlElement(ElementName:= "LiteralOrderID")> _
public OrderID As String
End Class
[XmlType("BigBooksService", Namespace = "http://www.cpandl.com")]
[SoapType("SoapBookService")]
[XmlRoot("BookOrderForm")]
public class Order {
// Both types of attributes can be applied. Depending on which
// the method used, either one will affect the call.
[SoapElement(ElementName = "EncodedOrderID")]
[XmlElement(ElementName = "LiteralOrderID")]
public String OrderID;
}
Resultatet av att tillämpa XmlTypeAttribute och SoapTypeAttribute kan visas när du undersöker tjänstbeskrivningen, som du ser i följande kodexempel.
<s:element name="BookOrderForm" type="s0:BigBookService" />
<s:complexType name="BigBookService">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="LiteralOrderID" type="s:string" />
</s:sequence>
<s:schema targetNamespace="http://tempuri.org/encodedTypes">
<s:complexType name="SoapBookService">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="EncodedOrderID" type="s:string" />
</s:sequence>
</s:complexType>
</s:schema>
</s:complexType>
Effekten av XmlRootAttribute kan också visas i HTTP GET- och HTTP POST-resultaten enligt följande.
<?xml version="1.0" encoding="utf-8"?>
<BookOrderForm xmlns="http://tempuri.org/">
<LiteralOrderID>string</LiteralOrderID>
</BookOrderForm>
Se även
- XML- och SOAP-serialisering
- Attribut som styr kodad SOAP-serialisering
- Anvisningar: Serialisera ett objekt som en SOAP-Encoded XML-dataström
- Anvisningar: Åsidosätt kodad SOAP XML-serialisering
- Introduktion till XML-serialisering
- Anvisningar: Serialisera ett objekt
- Anvisningar: Deserialisera ett objekt