Condividi tramite


Procedura: gestire intestazioni SOAP sconosciute

Questo argomento è specifico di una tecnologia legacy. Servizi Web XML e client di servizi Web XML devono essere creati attualmente tramite Windows Communication Foundation.

Un client del servizio Web può inviare una richiesta SOAP con intestazione SOAP a un metodo del servizio Web previsto dal servizio stesso, senza tuttavia averlo definito in modo esplicito. In questo caso, poiché la specifica SOAP dichiara che viene generata un'eccezione quando le intestazioni SOAP hanno un attributo mustUnderstand impostato su true, è importante stabilire se la semantica dell'intestazione SOAP viene riconosciuta ed elaborata. Per dettagli sulla gestione di intestazioni SOAP richieste da un client, vedere Gestione di intestazioni SOAP richieste da un client di servizio Web XML.

Per gestire intestazioni SOAP sconosciute da un client di servizio Web

  1. Per gestire più intestazioni SOAP sconosciute, aggiungere una variabile membro alla classe che implementa il servizio Web con un tipo di SoapUnknownHeader o SoapHeader, oppure una matrice di uno dei due.

    Dichiarare il tipo come una matrice o una singola istanza di SoapUnknownHeader ha il vantaggio supplementare che SoapUnknownHeader dispone di una proprietà Element. La proprietà Element è di tipo XmlElement e rappresenta il documento XML per l'elemento Header della richiesta o della risposta SOAP. In questo modo, interrogando la proprietà Element, un metodo del servizio Web può determinare il nome dell'intestazione SOAP, insieme ai dati passati dall'intestazione stessa.

    public class MyWebService {
        public SoapUnknownHeader[] unknownHeaders;
    
    Public Class MyWebService
        Public unknownHeaders() As SoapUnknownHeader
    
  2. Applicare un attributo SoapHeader a ogni metodo del servizio Web creato per elaborare ogni intestazione SOAP sconosciuta.

    
        [WebMethod]
        [SoapHeader("unknownHeaders")]
        public string MyWebMethod()
    
        <WebMethod, _
         SoapHeader("unknownHeaders") > _
        Public Function MyWebMethod() As String
    
    
  3. Aggiungere il codice necessario per determinare se è possibile o meno elaborare le intestazioni SOAP sconosciute.

    Se la variabile membro è di tipo SoapUnknownHeader, interrogando la proprietà Element, un metodo del servizio Web può determinare il nome dell'intestazione SOAP, insieme ai dati passati dall'intestazione stessa. La proprietà Name della proprietà Element identifica il nome dell'intestazione SOAP.

    
           foreach (SoapUnknownHeader header in unknownHeaders) 
           {
             // Check to see if this a known header.
             if (header.Element.Name == "MyKnownHeader")
    
           Dim header As SoapUnknownHeader       
           For Each header In unknownHeaders
             ' Check to see if this is a known header.
             If (header.Element.Name = "MyKnownHeader") Then
    
  4. Se si conosce la modalità di elaborazione di una particolare intestazione SOAP, impostare la proprietà DidUnderstand della variabile membro che rappresenta l'intestazione SOAP sconosciuta su true.

    Se un metodo del servizio Web elabora un'intestazione SOAP sconosciuta e non imposta la proprietà DidUnderstand su true, è possibile che venga generata un’eccezione SoapHeaderException. Per maggiori dettagli, vedere Gestione di intestazioni SOAP richieste da un client di servizio Web XML

             // Check to see if this is a known header.
             if (header.Element.Name == "MyKnownHeader")
                   header.DidUnderstand = true;
             else
                 // For those headers that cannot be 
                 // processed, set DidUnderstand to false.
                 header.DidUnderstand = false;
             }
    
             ' Check to see if this a known header.
             If (header.Element.Name = "MyKnownHeader") Then
                   header.DidUnderstand = True
             Else
                 ' For those headers that cannot be 
                 ' processed, set DidUnderstand to false.
                 header.DidUnderstand = False
             End If
    
    hf2y839a.note(it-it,VS.100).gifNota:
    La proprietà DidUnderstand viene utilizzata dai servizi Web creati mediante ASP.NET per comunicare con il metodo del servizio Web. Non fa parte della specifica SOAP. Il valore non viene visualizzato in nessuna parte della richiesta o della risposta SOAP.

    hf2y839a.note(it-it,VS.100).gifNota:
    Quando in un client del servizio Web viene compilata una classe proxy utilizzando lo strumento del linguaggio di descrizione dei servizi Web (Wsdl.exe) e un servizio Web definisce la variabile membro che rappresenta un'intestazione SOAP utilizzando il tipo SoapUnknownHeader, alla classe proxy non viene aggiunto alcun riferimento all'intestazione SOAP. Se un client del servizio Web decide di aggiungere l’intestazione SOAP alla richiesta, è necessario modificare la classe proxy aggiungendo una variabile membro e applicando un attributo SoapHeader al metodo che esegue la chiamata al metodo del servizio Web applicabile.

Vedere anche

Riferimento

SoapHeader
SoapHeaderAttribute
SoapUnknownHeader
SoapHeaderException

Concetti

Compilazione di client dei servizi Web XML

Altre risorse

Utilizzo delle intestazioni SOAP
Creare servizi Web XML mediante ASP.NET