Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
Literal ve Kodlanmış Stiller
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 Denetleyen Öznitelikler'de listelenen öznitelikler literal stil XML'yi denetlemek için tasarlanmıştır. Kodlanmış SOAP Serileştirmeyi Denetleen Öznitelikler'de listelenen öznitelikler kodlanmış stili denetler. Bu öznitelikleri özellikle uygulayarak, bir uygulamayı sadece bir stili veya her ikisini döndürecek şekilde uyarlayabilirsiniz. Ayrıca, bu öznitelikler (uygun şekilde) değerleri ve parametreleri döndürmek için uygulanabilir.
Her İki Stili Kullanma Örneği
XML Web hizmeti oluştururken, yöntemlerde her iki öznitelik kümesini de kullanabilirsiniz. Aşağıdaki kod örneğinde, MyService adlı sınıf, MyLiteralMethod ve MyEncodedMethod adlı iki XML Web hizmeti yöntemi içerir. Her iki yöntem de aynı işlevi gerçekleştirir: sınıfının bir örneğini Order döndürme.
Order sınıfında, XmlTypeAttribute ve SoapTypeAttribute öznitelikleri OrderID alanına uygulanır, ve her iki özniteliğin ElementName özellikleri farklı değerlere ayarlanmıştır.
Örneği çalıştırmak için kodu .asmx uzantısına sahip bir dosyaya yapıştırın ve dosyayı Internet Information Services (IIS) tarafından yönetilen bir sanal dizine 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ısı yapar MyLiteralMethod. Öğe adı "LiteralOrderID" olarak 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ısı yapar MyEncodedMethod. Öğe adı "EncodedOrderID" şeklindedir.
<?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, XmlElementAttribute özniteliğini MyLiteralMethod yönteminin dönüş değerine uygular. Bunu yapmak, ad alanını ve öğe adını kontrol etmenizi 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;
}
Kod çağrıldığında, aşağıdakine benzer XML 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 MyLiteralMethodResponse yöntemine bir parametre ekler ve XmlAttributeAttribute özniteliğini parametreye uygular. Hem öğe adı hem de ad alanı parametresi için ayarlanır.
<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 olacaktı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>
<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ıflarla ilişkili öğelerin ad alanını kontrol etmeniz gerekiyorsa, uygun şekilde XmlTypeAttribute, XmlRootAttribute ve SoapTypeAttribute uygulayabilirsiniz. Aşağıdaki kod örneği üçünü de sınıfına Order uygular.
<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;
}
"XmlTypeAttribute ve SoapTypeAttribute sonuçları, hizmet açıklamasını incelediğinizde, 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>
'nin XmlRootAttribute etkisi HTTP GET ve HTTP POST sonuçlarında da aşağıdaki gibi görülebilir.
<?xml version="1.0" encoding="utf-8"?>
<BookOrderForm xmlns="http://tempuri.org/">
<LiteralOrderID>string</LiteralOrderID>
</BookOrderForm>
Ayrıca bakınız
- XML ve SOAP Serileştirme
- Kodlanmış SOAP Serileştirmeyi Denetleen Öznitelikler
- Nasıl yapılır: Nesneyi SOAP-Encoded XML Akışı Olarak Seri Hale Getirme
- Nasıl yapılır: Kodlanmış SOAP XML Serileştirmesini Geçersiz Kılma
- XML Serileştirmeye Giriş
- Nasıl yapılır: Nesneyi SeriLeştirme
- Nasıl yapılır: Bir Nesneyi Seri Durumdan Çıkarma