Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La sérialisation XML est le mécanisme de transport sous-jacent utilisé dans l’architecture des services Web XML, effectué par la XmlSerializer classe. Pour contrôler le code XML généré par un service web XML, vous pouvez appliquer les attributs répertoriés dans les attributs qui contrôlent la sérialisation XML et les attributs qui contrôlent la sérialisation SOAP encodée aux classes, aux valeurs de retour, aux paramètres et aux champs d’un fichier utilisé pour créer un service web XML (.asmx). Pour plus d’informations sur la création d’un service web XML, consultez Services Web XML à l’aide de ASP.NET.
Styles littéraux et encodés
Le code XML généré par un service web XML peut être mis en forme de l’une des deux manières, littérale ou encodée, comme expliqué dans la personnalisation de la mise en forme des messages SOAP. Par conséquent, il existe deux ensembles d’attributs qui contrôlent la sérialisation XML. Les attributs répertoriés dans Attributs qui contrôlent la sérialisation XML sont conçus pour contrôler le code XML de style littéral. Les attributs répertoriés dans Attributs qui contrôlent la sérialisation SOAP encodée contrôlent le style codé. En appliquant de manière sélective ces attributs, vous pouvez adapter une application pour retourner l’un ou l’autre des styles. De plus, ces attributs peuvent être appliqués (le cas échéant) pour retourner des valeurs et des paramètres.
Exemple d’utilisation des deux styles
Lorsque vous créez un service Web XML, vous pouvez utiliser les deux ensembles d’attributs sur les méthodes. Dans l’exemple de code suivant, la classe nommée MyService
contient deux méthodes de service Web XML et MyLiteralMethod
MyEncodedMethod
. Les deux méthodes effectuent la même fonction : renvoyer une instance de la Order
classe. Dans la Order
classe, les XmlTypeAttribute attributs et les SoapTypeAttribute attributs sont appliqués au OrderID
champ, et les deux attributs ont leur ElementName
propriété définie sur des valeurs différentes.
Pour exécuter l’exemple, collez le code dans un fichier avec une extension .asmx et placez le fichier dans un répertoire virtuel géré par Internet Information Services (IIS). À partir d’un navigateur web, tapez le nom de l’ordinateur, du répertoire virtuel et du fichier.
<%@ 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;
}
}
L’exemple de code suivant appelle MyLiteralMethod
. Le nom de l’élément est remplacé par « 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>
L’exemple de code suivant appelle MyEncodedMethod
. Le nom de l’élément est « 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>
Application d’attributs à des valeurs de retour
Vous pouvez également appliquer des attributs pour retourner des valeurs pour contrôler l’espace de noms, le nom de l’élément, etc. L’exemple de code suivant applique l’attribut XmlElementAttribute
à la valeur de retour de la MyLiteralMethod
méthode. Cela vous permet de contrôler l’espace de noms et le nom de l’élément.
<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;
}
Lorsqu’il est appelé, le code retourne du code XML semblable à ce qui suit.
<?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>
Attributs appliqués aux paramètres
Vous pouvez également appliquer des attributs à des paramètres pour spécifier l’espace de noms, le nom de l’élément, etc. L’exemple de code suivant ajoute un paramètre à la MyLiteralMethodResponse
méthode et applique l’attribut XmlAttributeAttribute
au paramètre. Le nom de l’élément et l’espace de noms sont tous les deux définis pour le paramètre.
<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;
}
La requête SOAP ressemble à ce qui suit.
<?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>
Application d’attributs à des classes
Si vous devez contrôler l’espace de noms des éléments qui sont corrélés aux classes, vous pouvez appliquer XmlTypeAttribute
, XmlRootAttribute
et SoapTypeAttribute
, le cas échéant. L’exemple de code suivant applique les trois à la Order
classe.
<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;
}
Les résultats de l'application des XmlTypeAttribute
et SoapTypeAttribute
sont visibles lorsque vous examinez la description du service, comme illustré dans l'exemple de code suivant.
<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>
L’effet de la requête XmlRootAttribute
peut également être vu dans les résultats HTTP GET et HTTP POST, comme suit.
<?xml version="1.0" encoding="utf-8"?>
<BookOrderForm xmlns="http://tempuri.org/">
<LiteralOrderID>string</LiteralOrderID>
</BookOrderForm>
Voir aussi
- Sérialisation XML et SOAP
- Attributs qui contrôlent la sérialisation SOAP encodée
- Guide pratique pour sérialiser un objet en tant que flux XML SOAP-Encoded
- Procédure : remplacer la sérialisation XML SOAP encodée
- Présentation de la sérialisation XML
- Guide pratique pour sérialiser un objet
- Comment : désérialiser un objet