Question

Quelqu'un at-il une expérience des extensions de service Web? J'ai passé du temps à essayer de créer une extension de service Web à partir des exemples MS.

J'ai un client de service Web .net 3.5, construit en ajoutant une référence au WSDL, via VS IDE " Project > Ajouter une référence de service & Cela a construit mon client de service Web et tout fonctionne correctement.

Je dois intercepter le corps de la demande et de la réponse pour mon client de service Web. J'ai trouvé de nombreuses références aux extensions du service Web, mais je suis attaqué par ceux qui sont fatigués et je ne peux tout simplement pas faire feu mes extensions.

J'ai utilisé l'exemple MS d'ici & "Comment implémenter une extension SOAP &"; ( http://msdn.microsoft.com/en-us/library/7w06t139 .aspx ), qui crée un journal pour les flux de requêtes / réponses.

L'article MS associé " Modification d'un message SOAP " ( http://msdn.microsoft.com/en- us / library / esw638yk (VS.85) .aspx ) montre comment activer l'extension SOAP pour le client Web:

  

Implémentation de l'extension SOAP

     

Il existe deux manières d'exécuter une extension SOAP sur une application cliente ou serveur. Tout d'abord, vous pouvez configurer l'application pour exécuter l'extension. Pour configurer votre extension SOAP afin qu'elle s'exécute pour toutes les méthodes Web sur tous les services Web, en particulier un vroot, modifiez la section <soapExtensionTypes> Elément du fichier Web.config. Le code suivant montre que la valeur de l'attribut type doit figurer sur une ligne et inclure le nom complet de l'extension, ainsi que la version, la culture et le jeton de clé publique de l'assembly signé.

     

< configuration >
  < system.web >
      < webServices >
        < soapExtensionTypes >
          < add type = & "Contoso.MySoapExtension, version = 2.0.0.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35 &";   priorité = " 1 " group = & "0 &"; / >
          < / soapExtensionTypes >
      < / webServices >
    < /system.web >
  < / configuration >

J'ai compilé la traceextension dans sa propre bibliothèque de classes et l'ai référencée dans le fichier web.config du projet de service Web, comme suit:

  

< add type = & "TraceExtension, Version = 1.0.0.0, Culture = neutre, PublicKeyToken = ef8757fac167b8d8 &"; priorité = " 1 " groupe = " haut " / >

Pas de joie. Rien n'est enregistré, aucun point d'arrêt n'est atteint.

J'ai ensuite supprimé la classe référencée, puis le code source dans le projet de service Web.

J'ai essayé d'y ajouter une référence comme ceci (mon espace de nom est ServcieTest001):

  

< add type = " ServiceTest001.TraceExtension " groupe = " haut " priorité = " 1 " / >

J'ai utilisé le fil de discussion suivant comme guide pour me permettre l'extension & "Obtenir des données brutes de savon à partir d'une référence Web client en cours d'exécution dans asp-net &" ; ( http: // stackoverflow .com / questions / 300674 / getting-raw-soap-data-from-reference-client-web-running-in-asp-net ).

Toujours pas de joie. J'ai ensuite copié le code à partir du thread ci-dessus et je ne parviens toujours pas à déclencher l'extension lorsque je fais une demande SOAP.

Quelqu'un peut-il m'indiquer un projet de démonstration fonctionnel d'extension de service Web téléchargeable afin que je puisse le démonter et déterminer ce qu'il me manque?

Était-ce utile?

La solution

John a raison, vous pouvez intercepter les messages sur le client à l'aide d'un comportement client personnalisé qui implémente IClientMessageInspector. Voir Procédure: inspecter ou modifier les messages sur le client sur MSDN.

La seule chose qui est "délicate" à ce sujet est que si vous envisagez de modifier le message body , vous devez d'abord créer une copie du message d'origine. Voir Utilisation de la classe de message pour plus de détails.

Autres conseils

Il y a de fortes chances que vous souhaitiez vous reposer.

Vous ne voulez jamais utiliser WSE. WSE est obsolète.

Vous ne voulez pas utiliser les services Web ASMX - Microsoft les considère maintenant comme " hérités " technologie, et ne corrigera pas les bugs. BTW, WSE est basé sur ASMX, alors qu'est-ce qui en fait?

Vous souhaitez uniquement travailler avec Windows Communication Foundation. Le centre de développement WCF sur MSDN se trouve à l'adresse http://msdn.microsoft.com/wcf/ .

Amusez-vous et évitez les trucs méchants, anciens et obsolètes.

Ouais - j'étais trop fatigué.

Je pense que les extensions de service Web fonctionnent avec " références Web " (.net 2), pas " Références de service " (.net 3).

Donc, je suppose que je vais modifier ma question - comment puis-je intercepter la demande et la réponse pour un .net 3 & "Référence du service &"; connecté à un service Web hérité?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top