Gewusst wie: Steuern der allgemeinen SOAP-Textformatierung für eine Webdienstmethode
Für eine allgemeine SOAP-Textformatierung (oder einen allgemeinen Stil) stellt WSDL (Web Services Description Language) zwei Auswahlmöglichkeiten bereit: RPC und document. .NET Framework steuert diese Auswahl mithilfe von Attributen im Code.
So geben Sie einen Document-Formatierungsstil an
Wenden Sie ein SoapDocumentMethod-Attribut auf die Methode in der Proxyklasse an, die die entsprechende Webdienstmethode aufruft.
Mit dem Document-Formatierungsstil können Webdienste, die mit ASP.NET-Unterstützung erstellt wurden, sowohl den Literal-Parameterformatierungsstil als auch den Encoded-Parameterformatierungsstil verwenden. Das folgende Beispiel kombiniert den Formatierungsstil der Document-Methode mit dem Literal-Parameterformatierungsstil.
[SoapDocumentMethod("https://www.contoso.com/DocumentWrappedLiteral", RequestNamespace="https://www.contoso.com", ResponseNamespace="https://www.contoso.com", Use=SoapBindingUse.Literal)] public string DocumentWrappedLiteral(Address MyAddress, bool useZipPlus4) {
<SoapDocumentMethod("https://www.contoso.com/DocumentWrappedLiteral", _ RequestNamespace:="https://www.contoso.com", _ ResponseNamespace:="https://www.contoso.com", _ Use:=SoapBindingUse.Literal)> _ Public Function DocumentWrappedLiteral(ByVal MyAddress As Address, _ ByVal useZipPlus4 As Boolean)As String
Mit dem Document-Formatierungsstil wird ein XSD-Schema innerhalb der Dienstbeschreibung definiert, die sowohl die SOAP-Anforderung als auch die SOAP-Antwort definiert. Der folgende Code ist ein Auszug aus der Dienstbeschreibung für die SOAP-Anforderung der
DocumentWrappedLiteral
-Webdienstmethode. Da der erste Parameter für dieDocumentWrappedLiteral
-Webdienstmethode eine Klasse ist und der Literal-Parameterformatierungsstil angegeben wurde, wird ein XSD-Schema für denaddress
-Typ erstellt.<s:element name="DocumentWrappedLiteral"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="MyAddress" nillable="true" type="s0:Address" /> <s:element minOccurs="1" maxOccurs="1" name="useZipPlus4" type="s:boolean" /> </s:sequence> </s:complexType> </s:element> <s:complexType name="Address"> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="Street" nillable="true" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="City" nillable="true" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="Zip" nillable="true" type="s:string" /> </s:sequence> </s:complexType>
Wenn das XSD-Schema in der Dienstbeschreibung definiert ist, folgt der XML-Abschnitt der SOAP-Anforderung für die
DocumentWrappedLiteral
-Dienstmethode. Beachten Sie, dass die XML-Elemente unter dem Body-Element in der SOAP-Anforderungen mit den im XSD-Schema definierten Elementen übereinstimmen.<?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="https://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <DocumentWrappedLiteral xmlns="https://www.contoso.com"> <MyAddress> <Street>string</Street> <City>string</City> <Zip>string</Zip> </MyAddress> <useZipPlus4>boolean</useZipPlus4> </DocumentWrappedLiteral> </soap:Body> </soap:Envelope>
So geben Sie einen RPC-Formatierungsstil an
Wenden Sie ein SoapRpcMethod-Attribut auf die Methode in der Proxyklasse an, die die entsprechende Webdienstmethode aufruft.
[SoapRpcMethodAttribute("https://www.contoso.com/Rpc", RequestNamespace="https://www.contoso.com", ResponseNamespace="https://www.contoso.com")] public Address Rpc(Address address, bool useZipPlus4) {
<SoapRpcMethodAttribute("https://www.contoso.com/Rpc", _ RequestNamespace:="https://www.contoso.com", _ ResponseNamespace:="https://www.contoso.com")> _ Public Function Rpc(ByVal address As Address, _ ByVal useZipPlus4 As Boolean) As Address
Im vorhergehenden Beispiel ist das XSD-Schema in der Dienstbeschreibung für die SOAP-Anforderung oder die SOAP-Antwort für die
Rpc
-Methode nicht streng definiert; es sind nur die Teile definiert, aus denen sie bestehen. Sehen Sie sich daher die SOAP-Anforderung für dieRpc
-Methode an, und beachten Sie, dass die Parameter innerhalb eines Elements gekapselt und mit der Encoded-Parameterformatierung codiert sind.<?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="https://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="https://www.contoso.com" xmlns:tnsTypes="https://www.contoso.com/encodedTypes" xmlns:wsdl="https://schemas.xmlsoap.org/wsdl/" xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"> <soap:Body soap:encodingStyle="https://schemas.xmlsoap.org/soap/encoding/"> <tns:Rpc> <address href="#1" /> <useZipPlus4>boolean</useZipPlus4> </tns:Rpc> <tnsTypes:Address id="1"> <Street id="2">string</Street> <City id="3">string</City> <Zip id="4">string</Zip> </tnsTypes:Address> </soap:Body> </soap:Envelope>
Siehe auch
Referenz
SoapDocumentMethodAttribute
SoapRpcMethodAttribute
Weitere Ressourcen
Anpassen der Formatierung von SOAP-Nachrichten
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.