Partager via


Procédure pas à pas : altération du message SOAP à l'aide d'extensions SOAP

Les extensions SOAP peuvent être insérées dans le message SOAP .NET Framework qui traite le pipeline pour modifier ou inspecter une demande ou un message de réponse SOAP pendant sa sérialisation ou désérialisation, sur le service Web ou client. Cette procédure pas à pas indique comment générer et exécuter une extension SOAP. Pour une vision d'ensemble du fonctionnement des extensions SOAP, ainsi que de l'ordre dans lequel les méthodes d'extension SOAP sont appelées dans le pipeline de traitement du message, consultez Modification de messages SOAP à l'aide d'extensions SOAP.

Au cours de cette procédure pas à pas, vous apprenez à :

  • Dériver une classe de SoapExtension.

  • Enregistrer des références dans les objets Stream qui représentent les futurs messages SOAP avant et après que l'extension SOAP a effectué son traitement.

  • Initialiser les données spécifiques de l'extension SOAP.

  • Traiter les messages SOAP pendant les SoapMessageStage ou étapes applicables.

Configurez l'extension SOAP pour s'exécuter avec les méthodes de service Web spécifiques.

Composants requis

Dérivez une classe de SoapExtension.

La classe qui dérive de SoapExtension est la classe qui exécute les fonctionnalités de l'extension SOAP. Autrement dit, si l'extension SOAP est une extension SOAP de chiffrement, la classe qui dérive de la classe SoapExtension exécute le chiffrement et le déchiffrement correspondant.

Enregistrer les références dans des objets de flux représentant les futurs messages SOAP

Pour modifier un message SOAP, vous devez obtenir une référence au flux qui peut être utilisé pour obtenir le contenu de futurs messages SOAP. Votre seule possibilité d'obtenir cette référence est de remplacer la méthode ChainStream.

Pour enregistrer les références dans des objets de flux représentant les futurs messages SOAP

  1. Substituez la méthode ChainStream.

    La méthode ChainStream a la signature suivante :

    public virtual Stream ChainStream(Stream stream)
    
    Public Overridable Function ChainStream(ByVal stream As Stream) As Stream
    
  2. Dans l'implémentation ChainStream, assignez l'instance Stream passée comme paramètre.

    Une référence à un Stream est passée une fois dans le ChainStream, avant tout SoapMessageStage. Ce Stream fait référence au XML du message SOAP après que les extensions SOAP de priorité faible (consultez Configurer l'extension SOAP pour s'exécuter avec les méthodes de service Web pour plus d'informations sur les priorités d'extension SOAP) se sont exécutées et ont apporté leurs modifications au message SOAP. Une extension SOAP doit assigner cette référence à une variable membre pour accès ultérieur pendant le SoapMessageStage, lorsqu'une extension SOAP inspecte ou modifie le message SOAP.

    Toutefois, le Stream passé dans ChainStream n'est pas le Stream qu'une extension SOAP doit modifier.

  3. Dans l'implémentation ChainStream, instanciez un nouveau Stream, enregistrez-y une référence dans une variable membre privée et retournez la référence.

    L'exemple de code suivant illustre une implémentation courante de la méthode ChainStream.

Pour un exemple d'implémentation courante de la méthode ChainStream, consultez Comment : implémenter la méthode ChainStream pour enregistrer des références sur les objets de flux.

Initialiser les données spécifiques de l'extension SOAP

La classe qui dérive de SoapExtension a deux méthodes pour initialiser les données, GetInitializer et Initialize.

Le moment auquel l'infrastructure ASP.NET appelle la méthode GetInitializer et les paramètres qui sont passés à la méthode dépendent de al configuration de l'extension SOAP. (Consultez Modification de messages SOAP à l'aide d'extensions SOAP et Configurer l'extension SOAP pour s'exécuter avec les méthodes de service Web.)

Pour initialiser les données lorsque l'extension SOAP est configurée à l'aide d'un attribut

  1. Implémentez la méthode GetInitializer avec la signature suivante :

    public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
    
    Public Overloads Overrides Function GetInitializer(methodInfo As _
       LogicalMethodInfo, attribute As SoapExtensionAttribute) As Object
    

    Le LogicalMethodInfo fournit des informations de prototype sur la méthode de service Web, telles que le nombre de paramètres et leur type de données.

  2. Si nécessaire, appelez la méthode Initialize, en passant l'objet retourné par GetInitializer. Pour de nombreuses implémentations SoapExtension, la méthode Initialize peut rester vide.

Pour initialiser les données lorsque l'extension SOAP est configurée dans un fichier de configuration

  1. Implémentez la méthode GetInitializer avec la signature suivante :

    public override object GetInitializer(Type WebServiceType)
    
    Public Overloads Overrides Function GetInitializer(WebServiceType As Type) As Object
    

    Le paramètre Type est le type de la classe qui implémente le service Web.

  2. Si nécessaire, appelez la méthode Initialize, en passant l'objet retourné par GetInitializer. Pour de nombreuses implémentations SoapExtension, la méthode Initialize peut rester vide.

Pour obtenir un exemple d'initialisation des données en mémoire cache lorsqu'une extension SOAP est configurée, consultez Comment : initialiser les données en mémoire cache lorsqu'une extension SOAP est configurée.

Traiter les messages SOAP

Dans la classe dérivée de SoapExtension, l'essentiel de l'implémentation est la méthode ProcessMessage. Cette méthode est appelée plusieurs fois par ASP.NET à chacune des étapes définies dans l'énumération SoapMessageStage.

Pour traiter les messages SOAP

  • Implémentez la méthode abstraite ProcessMessage.

    L'implémentation suivante de la méthode ProcessMessage suit un appel vers un service Web. Pendant le suivi, si le SoapMessageStage indique que les paramètres ont été sérialisés en XML, le XML est écrit dans un fichier.

    public override void ProcessMessage(SoapMessage message) 
    {
       switch (message.Stage) 
       {
       case SoapMessageStage.BeforeSerialize:
           break;
       case SoapMessageStage.AfterSerialize:
           // Write the SOAP message out to a file.
           WriteOutput( message );
           break;
       case SoapMessageStage.BeforeDeserialize:
           // Write the SOAP message out to a file.
           WriteInput( message );
           break;
       case SoapMessageStage.AfterDeserialize:
           break;
       default:
           throw new Exception("invalid stage");
       }
    }
    
    Public Overrides Sub ProcessMessage(message As SoapMessage)
        Select Case message.Stage
          Case SoapMessageStage.BeforeSerialize
          Case SoapMessageStage.AfterSerialize
            ' Write the SOAP message out to a file.
            WriteOutput(message)
          Case SoapMessageStage.BeforeDeserialize
            ' Write the SOAP messae out to a file.
            WriteInput(message)
          Case SoapMessageStage.AfterDeserialize
          Case Else
            Throw New Exception("invalid stage")
        End Select
    End Sub
    

Configurer l'extension SOAP pour s'exécuter avec les méthodes de service Web

Une extension SOAP peut être configurée pour s'exécuter à l'aide d'un attribut personnalisé ou par la modification d'un fichier de configuration. Un attribut personnalisé est appliqué à une méthode de service Web. En cas d'utilisation d'un fichier de configuration, l'extension SOAP s'exécute avec tous les services Web à portée du fichier de configuration. Pour plus d'informations sur le fonctionnement des fichiers de configuration, consultez Configuring Applications.

Pour configurer une extension SOAP à l'aide d'un attribut personnalisé

  1. Dériver une classe de SoapExtensionAttribute.

  2. Implémentez deux propriétés de SoapExtensionAttribute : ExtensionType et Priority. Une extension SOAP doit retourner le type de l'extension SOAP dans la propriété ExtensionType. La propriété Priority représente la priorité relative de l'extension SOAP, comme expliqué dans Application du groupe de priorité dans la modification du message SOAP à l'aide d'extensions SOAP.

  3. Appliquez l'attribut personnalisé à chaque méthode de service Web avec laquelle vous souhaitez que l'extension SOAP s'exécute.

Pour configurer une extension SOAP dans un fichier de configuration

  1. S'il n'y en a pas encore, ajoutez un élément XML soapExtensionTypes à la section webServices du fichier App.config ou Web.config approprié.

  2. Dans l'élément XML soapExtensionTypes, ajoutez un élément XML add pour chaque extension SOAP que vous souhaitez exécuter avec chaque service Web à portée du fichier de configuration.

    L'élément XML add a les propriétés suivantes.

    • type : spécifie le type de l'extension SOAP et l'assembly dans lequel elle réside.

    • priority : spécifie la priorité relative de l'extension SOAP dans son groupe.

    • Group : spécifie le groupe dont une extension SOAP est un membre.

Voir aussi

Tâches

Comment : implémenter une extension SOAP
Comment : initialiser les données en mémoire cache lorsqu'une extension SOAP est configurée
Comment : implémenter la méthode ChainStream pour enregistrer des références sur les objets de flux

Référence

SoapExtension
SoapExtensionAttribute
SoapMessageStage
LogicalMethodInfo

Concepts

Modification de messages SOAP à l'aide d'extensions SOAP
Anatomie de la durée de vie d'un service Web XML
Création de clients de service Web XML

Autres ressources

Configuring Applications

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.