Procedura: controllare la formattazione complessiva del corpo dei messaggi SOAP per un metodo del servizio Web
Questo argomento è specifico di una tecnologia legacy. Servizi Web XML e client di servizi Web XML devono essere creati attualmente tramite Windows Communication Foundation.
In WSDL (the Web Services Description Language), sono offerte due possibilità per la formattazione o lo stile complessivo del corpo dei messaggi SOAP: RPC e documento. .NET Framework controlla queste opzioni al livello di codice utilizzando gli attributi.
Per specificare uno stile di formattazione del metodo Document
Applicare un attributo SoapDocumentMethod o un attributo SoapRpcMethod al metodo nella classe proxy che esegue la chiamata al metodo del servizio Web applicabile.
I servizi Web creati mediante il supporto ASP.NET utilizzano entrambi gli stili di formattazione dei parametri, ovvero Literal e Encoded. Nell'esempio seguente viene mostrato lo stile di formattazione del metodo Document unito allo stile di formattazione dei parametri Literal.
[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
Con lo stile di formattazione di Document, viene definito uno schema XSD all'interno della descrizione del servizio che definisce la richiesta e la risposta SOAP. Gli elementi seguenti provengono dalla descrizione del servizio per la richiesta SOAP del metodo del servizio Web
DocumentWrappedLiteral
. Poiché il primo parametro definito per il metodo del servizio WebDocumentWrappedLiteral
è una classe ed è specificato lo stile di formattazione del parametro Literal, viene creato uno schema XSD per il tipoaddress
.<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>
La parte XML della richiesta SOAP per il metodo del servizio
DocumentWrappedLiteral
viene creata sulla base dello schema XSD definito nella descrizione del servizio. Notare che gli elementi XML sottostanti l'elemento Body nella richiesta SOAP corrispondono agli elementi definiti nello schema XSD.<?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>
Per specificare lo stile di formattazione RPC
Applicare un attributo SoapRpcMethod al metodo nella classe proxy che esegue la chiamata al metodo del servizio Web applicabile.
[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
Uno schema XSD non viene definito rigidamente nella descrizione del servizio per la richiesta o la risposta SOAP al metodo
Rpc
riportato nell'esempio precedente, ma piuttosto soltanto le parti in cui sono contenute. Pertanto, eseguire la ricerca della richiesta SOAP per il metodoRpc
, considerando che i parametri sono incapsulati all'interno di un elemento e codificati utilizzando la formattazione del parametro Encoded.<?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>
Vedere anche
Riferimento
SoapDocumentMethodAttribute
SoapRpcMethodAttribute