Comment : gérer les en-têtes SOAP inconnus

Cette rubrique est spécifique à une technologie existante. Les services Web XML et les clients du service Web XML doivent à présent être créés à l'aide de Windows Communication Foundation.

Un client de service Web peut envoyer une demande SOAP avec un en-tête SOAP à une méthode de service Web que le service Web attendait, mais n'a peut-être pas défini explicitement. Dans ce cas, il est important de déterminer si la sémantique de l'en-tête SOAP est comprise et traitée, étant donné que la spécification SOAP stipule qu'une exception est levée lorsque l'attribut mustUnderstand des en-têtes SOAP a la valeur true. Pour plus d'informations sur la gestion des en-têtes SOAP requis par un client, consultez Gestion des en-têtes SOAP requis par un client de service Web XML.

Pour gérer des en-têtes SOAP inconnus à partir d'un client de service Web

  1. Ajoutez une variable membre à la classe qui implémente le service Web avec un type de SoapUnknownHeader ou SoapHeader, ou un tableau des deux, pour gérer plusieurs en-têtes SOAP inconnus.

    Déclarer le type comme tableau une instance unique de SoapUnknownHeader présente l'avantage supplémentaire que SoapUnknownHeader a une propriété Element. La propriété Element est de type XmlElement et représente le document XML pour l'élément Header de la demande SOAP ou réponse SOAP. Ainsi, une méthode de service Web peut déterminer le nom de l'en-tête SOAP, ainsi que les données passées par l'en-tête SOAP, en interrogeant la propriété Element.

    public class MyWebService {
        public SoapUnknownHeader[] unknownHeaders;
    
    Public Class MyWebService
        Public unknownHeaders() As SoapUnknownHeader
    
  2. Appliquez un attribut SoapHeader à chaque méthode de service Web qui projette de traiter chaque en-tête SOAP inconnu.

    
        [WebMethod]
        [SoapHeader("unknownHeaders")]
        public string MyWebMethod()
    
        <WebMethod, _
         SoapHeader("unknownHeaders") > _
        Public Function MyWebMethod() As String
    
    
  3. Ajoutez du code pour déterminer si vous pouvez traiter des en-têtes SOAP inconnus.

    Si la variable membre est de type SoapUnknownHeader, une méthode de service Web peut déterminer le nom de l'en-tête SOAP, ainsi que les données passées par l'en-tête SOAP, en interrogeant la propriété Element. La propriété Name de la propriété Element identifie le nom de l'en-tête 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. Attribuez à la propriété DidUnderstand de la variable membre représentant l'en-tête SOAP inconnu la valeur true si le traitement d'un en-tête SOAP particulier est connu.

    Si une méthode de service Web traite un en-tête SOAP inconnu et n'affecte pas à la propriété DidUnderstand la valeur true, une SoapHeaderException peut être levée. Pour plus de détails, consultez Gestion des en-têtes SOAP requis par un client de service 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(fr-fr,VS.100).gifRemarque :
    La propriété DidUnderstand est utilisée par les services Web créés à l'aide d'ASP.NET pour communiquer avec la méthode de service Web. Elle ne fait pas partie de la spécification SOAP. Sa valeur n'apparaît dans aucune partie de la demande SOAP ou de la réponse SOAP.

    hf2y839a.note(fr-fr,VS.100).gifRemarque :
    Lorsqu'un client de service Web génère une classe proxy à l'aide de l'outil Web Services Description Language Tool (Wsdl.exe) et qu'un service Web définit la variable membre qui représente un en-tête SOAP à l'aide du type SoapUnknownHeader, aucune référence à cet en-tête SOAP n'est ajoutée à la classe proxy. Si un client de service Web décide d'ajouter cet en-tête SOAP à la demande SOAP, il doit modifier la classe proxy en ajoutant une variable membre et en appliquant un attribut SoapHeader à la méthode qui fait l'appel à la méthode Web Service applicable.

Voir aussi

Référence

SoapHeader
SoapHeaderAttribute
SoapUnknownHeader
SoapHeaderException

Concepts

Création de clients de service Web XML

Autres ressources

Utilisation d'en-têtes SOAP
Services Web XML utilisant ASP.NET