XML Web Hizmetleri ile XML Serileştirme
XML serileştirme, XML Web hizmetleri mimarisinde kullanılan ve sınıfı tarafından gerçekleştirilen temel aktarım mekanizmasıdır XmlSerializer . XML Web hizmeti tarafından oluşturulan XML'yi denetlemek için, hem XML Serileştirmesini Denetleen Öznitelikler hem de Kodlanmış SOAP Serileştirmesini Denetleen Öznitelikler'de listelenen öznitelikleri, XML Web hizmeti (.asmx) oluşturmak için kullanılan bir dosyanın sınıflarına, değerlerine, parametrelerine ve alanlarına uygulayabilirsiniz. XML Web hizmeti oluşturma hakkında daha fazla bilgi için bkz . ASP.NET Kullanan XML Web Hizmetleri.
Değişmez değer ve kodlanmış stilleri
BIR XML Web hizmeti tarafından oluşturulan XML, SOAP İleti Biçimlendirmesini Özelleştirme bölümünde açıklandığı gibi sabit veya kodlanmış olmak üzere iki yoldan biriyle biçimlendirilebilir. Bu nedenle, XML serileştirmeyi denetleen iki öznitelik kümesi vardır. XML Serileştirmesini Denetleen Öznitelikler'de listelenen öznitelikler değişmez stil XML'sini denetlemek için tasarlanmıştır. Kodlanmış SOAP Serileştirmeyi Denetleen Öznitelikler'de listelenen öznitelikler kodlanmış stili denetler. Bu öznitelikleri seçmeli olarak uygulayarak, bir uygulamayı stilleri veya her ikisini de döndürecek şekilde uyarlayabilirsiniz. Ayrıca, bu öznitelikler (uygun şekilde) değerleri ve parametreleri döndürmek için uygulanabilir.
Her iki stil kullanarak örneği
XML Web hizmeti oluştururken, yöntemlerde her iki öznitelik kümesini de kullanabilirsiniz. Aşağıdaki kod örneğinde adlı sınıfı MyService
iki XML Web hizmeti yöntemlerini içeren MyLiteralMethod
ve MyEncodedMethod
. Her iki yöntem aynı işlevi gerçekleştirmek: örneği döndüren Order
sınıfı. Order
sınıfında ve SoapTypeAttributeXmlTypeAttribute özniteliklerinin her ikisi de alana uygulanır OrderID
ve her iki özniteliğin ElementName
de özelliği farklı değerlere ayarlanmıştır.
Örneği çalıştırmak için bir dosya uzantısı olan bir .asmx kodu yapıştırın ve Internet Information Services (IIS) tarafından yönetilen bir sanal dizin dosyası yerleştirin. Bir web tarayıcısından bilgisayarın, sanal dizinin ve dosyanın adını yazın.
<%@ 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;
}
}
Aşağıdaki kod örneği çağrıları MyLiteralMethod
. Öğe adı "LiteralOrderID için" değiştirilir.
<?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>
Aşağıdaki kod örneği çağrıları MyEncodedMethod
. Öğe adı "EncodedOrderID" dir.
<?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>
Dönüş Değerlerine Öznitelik Uygulama
Ad alanını, öğe adını vb. denetlemek için değer döndürmek için öznitelikler de uygulayabilirsiniz. Aşağıdaki kod örneği, yönteminin XmlElementAttribute
dönüş değerine özniteliğini MyLiteralMethod
uygular. Bunu yaptığınızda ad alanı ve öğe adı denetlenmesini sağlar.
<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;
}
Çağrıldığında, aşağıdakine benzer XML kodu döndürür.
<?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>
Parametrelere Uygulanan Öznitelikler
Ad alanı, öğe adı vb. belirtmek için parametrelere öznitelikler de uygulayabilirsiniz. Aşağıdaki kod örneği yöntemine MyLiteralMethodResponse
bir parametre ekler ve özniteliğini parametresine uygular XmlAttributeAttribute
. Öğe adı ve ad alanı her iki parameTRe için kümesidir.
<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 isteği aşağıdakine benzer.
<?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>
Sınıflara Öznitelik Uygulama
Sınıflar ile bağıntılı öğelerin ad alanını denetlemeniz gerekiyorsa, uygun şekilde , XmlRootAttribute
ve SoapTypeAttribute
uygulayabilirsinizXmlTypeAttribute
. Aşağıdaki kod örneği için üç uygular Order
sınıfı.
<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;
}
Uygulama sonuçlarını XmlTypeAttribute
ve SoapTypeAttribute
olduğunda, hizmet açıklamasını inceleyin aşağıdaki kod örneğinde gösterildiği gibi görülebilir.
<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>
Etkisini XmlRootAttribute
Ayrıca HTTP GET ve HTTP POST sonuçları gibi görülebilir.
<?xml version="1.0" encoding="utf-8"?>
<BookOrderForm xmlns="http://tempuri.org/">
<LiteralOrderID>string</LiteralOrderID>
</BookOrderForm>
Ayrıca bkz.
- XML ve SOAP Serileştirme
- Kodlanmış SOAP Serileştirmesini Denetleyen Öznitelikler
- Nasıl yapılır: SOAP Kodlu XML Akışı Olarak Nesneyi Serileştirme
- Nasıl yapılır: Kodlanmış SOAP XML Serileştirmesini Geçersiz Kılma
- XML Serileştirmeye Giriş
- Nasıl yapılır: Nesne Serileştirme
- Nasıl yapılır: Nesneyi Seri Durumdan Çıkarma