6
votes

Intercepter les messages dans un client WCF

Quelqu'un a-t-il une expérience avec des extensions de service Web? J'ai passé du temps à essayer de faire 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 à la WSDL, via le projet VS IDE "Projet> Ajouter une référence de service". Cela a construit mon client de service Web et tous fonctionne bien.

Je dois intercepter le corps de la demande et de la réponse pour mon client de service Web. J'ai trouvé beaucoup de références aux extensions de service Web, mais j'ai une attaque de la fatigue, et je ne peux tout simplement pas faire tirer mes extensions.

J'ai utilisé l'exemple MS d'ici "Comment implémenter une extension de SOAP" ( http://msdn.microsoft.com/en-us/library/7w06t139.aspx ), qui construit un enregistreur pour les flux de demande / réponse.

L'article de MS correspondant "Modification du message SOAP" ( http://msdn.microsoft.com/en-us/library/esw638yk(vs.85).aspx ) montre comment activer l'extension SOAP pour le client Web:

Mise en œuvre de l'extension SOAP

Il existe deux façons d'exécuter une extension de savon sur une application client ou serveur. Tout d'abord, vous pouvez configurer l'application pour exécuter l'extension. Pour configurer votre extension de SOAP à exécuter pour toutes les méthodes Web sur tous les services Web, en particulier un Vroot, modifier la section dans le fichier web.config. Le code suivant montre que la valeur d'attribut de type doit figurer sur une ligne et inclure le nom complet de l'extension, plus la version, la culture et le jeton de clé publique de l'Assemblée signée.










J'ai compilé la traceeextension dans sa propre bibliothèque de classe et la référencée dans le Web.config du projet de service Web, comme:

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

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

J'ai essayé d'ajouter une référence à cela comme (mon espace de noms est serviestest001):

J'ai utilisé le thread suivant comme un guide pour m'abonner que l'extension "GET-SOAP-SOAP-Data-Data-Data-Data-Référence-Client-In-ASP-NET" ( http://stackoverflow.com/questions/300674/ GET-SOAPW-SOAP-DATA-DATA-A-Web-Référence-Client-IN-ASP-NET ).

Toujours pas de joie. J'ai ensuite copié le code du fil ci-dessus et je ne peux toujours pas obtenir l'extension du feu lorsque je fais une demande de savon.

Quelqu'un peut-il me signaler à un projet de démonstration de service Web téléchargeable du service téléchargeable, afin que je puisse le démonter et savoir ce qui me manque?


0 commentaires

4 Réponses :


0
votes

chances que vous voulez vous reposer.

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

Vous ne voulez pas utiliser ASMX Web Services - Microsoft les considère maintenant comme une technologie «hérité» et ne sera pas corrigé de bugs. BTW, WSE est basé sur ASMX, alors qu'est-ce que cela le fait?


Vous voulez seulement travailler avec Windows Communication Foundation. Le Centre de développement WCF sur MSDN est chez http://msdn.microsoft.com/wcf/ .

Amusez-vous et restez à l'écart des trucs méchants, anciens et obsolètes.


1 commentaires

J'aimerais pouvoir utiliser WCF ... c'est un service Web hérité (non .NET) que je me connecte à, qui utilise un système de chiffrement personnalisé. C'est pourquoi j'essaie de construire l'extension de service Web.



0
votes

YUP - J'étais trop fatiguée.

i pense les extensions de service Web fonctionnent avec "Références Web" (.NET 2), pas "Références de service" (.NET 3).

Donc, je suppose modifier ma question - comment puis-je intercepter la demande et la réponse de une référence de service .NET 3 "connectée à un service Web hérité?


0 commentaires

13
votes

John a raison, vous pouvez intercepter les messages sur le client à l'aide d'un comportement client personnalisé implémentant ICLientMessageInspector. Voir Comment: inspecter ou modifier des messages sur le client sur MSDN. < / p>

La seule chose "délicate" à ce sujet est que si vous envisagez de modifier le message corps vous devrez d'abord créer une copie du message d'origine en premier. Voir Utilisation de la classe de messages pour les détails gooey.


0 commentaires

0
votes

Ceci est la commande qui obtient votre message RAW:

OperationContext.Current.RequestContext.RequestMessage 


0 commentaires