Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az XML-szerializálás az xml-webszolgáltatások architektúrájában használt, az XmlSerializer osztály által végrehajtott átviteli mechanizmus. Az XML-webszolgáltatás által létrehozott XML szabályozásához alkalmazhatja az XML-szerializálást vezérlő attribútumokban és a kódolt SOAP szerializálást vezérlő attribútumokban felsorolt attribútumokat az osztályokra, visszaadhatja az XML-webszolgáltatás (.asmx) létrehozásához használt fájl értékeit, paramétereit és mezőit. Az XML-webszolgáltatások létrehozásával kapcsolatos további információkért lásd: XML Web Services Using ASP.NET.
Literális és kódolt stílusok
Az XML-webszolgáltatás által létrehozott XML kétféleképpen formázható, akár konstans, akár kódolt módon, a SOAP-üzenetformázás testreszabása című cikkben leírtak szerint. Ezért az XML-szerializálást két attribútumkészlet vezérli. Az XML-szerializálást vezérlő attribútumokban felsorolt attribútumok a literális stílusú XML szabályozására szolgálnak. A kódolt stílust a kódolt SOAP szerializálást vezérlő attribútumokban felsorolt attribútumok szabályozzák. Ezeknek az attribútumoknak a szelektív alkalmazásával testre szabhatja az alkalmazásokat úgy, hogy mindkét stílust visszaadják. Ezenkívül ezek az attribútumok alkalmazhatók (adott esetben) az értékek és paraméterek visszaadására.
Példa mindkét stílus használatára
XML-webszolgáltatás létrehozásakor mindkét attribútumkészletet használhatja a metódusokon. A következő kódpéldában a nevű MyService osztály két XML-webszolgáltatás-metódust, MyLiteralMethod és MyEncodedMethod tartalmaz. Mindkét módszer ugyanazt a funkciót teljesíti: visszaad egy Order osztály példányt.
Order Az osztályban az XmlTypeAttribute és az SoapTypeAttribute attribútumok is a OrderID mezőre lesznek alkalmazva, és mindkét attribútum tulajdonsága ElementName különböző értékekre van állítva.
A példa futtatásához illessze be a kódot egy .asmx kiterjesztésű fájlba, és helyezze a fájlt az Internet Information Services (IIS) által felügyelt virtuális könyvtárba. Egy webböngészőben írja be a számítógép, a virtuális könyvtár és a fájl nevét.
<%@ 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;
}
}
Az alábbi példakód hivatkozik MyLiteralMethod. Az elem nevét "LiteralOrderID"-re változtatják.
<?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>
Az alábbi példakód hivatkozik MyEncodedMethod. Az elem neve "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>
Attribútumok alkalmazása értékek visszaadására
Attribútumokat is alkalmazhat az értékek visszaadására a névtér, az elemnév és így tovább szabályozásához. Az alábbi példakód az XmlElementAttribute attribútumot a metódus visszatérési értékére MyLiteralMethod alkalmazza. Ezzel szabályozhatja a névteret és az elem nevét.
<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;
}
Meghíváskor a kód az alábbihoz hasonló XML-t ad vissza.
<?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>
Paraméterekre alkalmazott attribútumok
Attribútumokat is alkalmazhat a paraméterekre a névtér, az elemnév és így tovább megadásához. Az alábbi példakód egy paramétert ad hozzá a MyLiteralMethodResponse metódushoz, és alkalmazza az XmlAttributeAttribute attribútumot a paraméterre. Az elem neve és a névtér is be van állítva a paraméterhez.
<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;
}
A SOAP-kérés a következőhöz hasonló.
<?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>
Attribútumok alkalmazása osztályokra
Ha szabályoznia kell az osztályokhoz kapcsolódó elemek névterét, akkor szükség szerint alkalmazhatja a XmlTypeAttribute, XmlRootAttribute és a SoapTypeAttribute elemeket. Az alábbi példakód mind a hármat a Order osztályra alkalmazza.
<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;
}
A XmlTypeAttribute és SoapTypeAttribute alkalmazásának eredményei akkor láthatók, amikor megvizsgálja a szolgáltatás leírását az alábbi kódpélda szerint.
<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>
A hatás a XmlRootAttribute HTTP GET és a HTTP POST eredményekben is látható, az alábbiak szerint.
<?xml version="1.0" encoding="utf-8"?>
<BookOrderForm xmlns="http://tempuri.org/">
<LiteralOrderID>string</LiteralOrderID>
</BookOrderForm>