83 votes

Comment obtenir la demande SOAP XML d'une demande de service Web WCF?

J'appelle ce service Web dans le code et j'aimerais voir le code XML, mais je ne peux pas trouver une propriété qui l'expose.

154voto

Kimberly Points 1050

Je pense que vous vouliez dire que vous voulez voir le XML sur le client, pas de trace sur le serveur. Dans ce cas, votre réponse est dans la question j'ai lié ci-dessus, et aussi à Comment vérifier ou Modifier des Messages sur le Client. Mais, depuis le .NET 4 version de cet article est manquant à ses C#, et la .NET 3.5 exemple a une certaine confusion (si ce n'est un bug) en elle, ici, il est élargi pour votre but.

Vous pouvez intercepter le message avant qu'il ne passe à l'aide d'un IClientMessageInspector:

using System.ServiceModel.Dispatcher;
public class MyMessageInspector : IClientMessageInspector
{ }

Les méthodes de cette interface, BeforeSendRequest et AfterReceiveReply, de vous donner accès à la demande et de la réponse. Utilisation de l'inspecteur, vous devez l'ajouter à un IEndpointBehavior:

using System.ServiceModel.Description;
public class InspectorBehavior : IEndpointBehavior
{
    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
        clientRuntime.MessageInspectors.Add(new MyMessageInspector());
    }
}

Vous pouvez laisser les autres méthodes de cette interface implémentations vides, sauf si vous souhaitez utiliser cette fonctionnalité, trop. Lire le how-to pour plus de détails.

Après l'instanciation du client, ajouter le comportement à l'extrémité. À l'aide de noms par défaut à partir de l'exemple de la WCF projet:

ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
client.Endpoint.Behaviors.Add(new InspectorBehavior());
client.GetData(123);

Définissez un point d'arrêt en MyMessageInspector.BeforeSendRequest(); request.ToString() est surchargée pour afficher le XML.

Si vous allez à manipuler les messages à tous, vous avez à travailler sur une copie du message. Voir l'Aide de la Classe de Message pour plus de détails.

Grâce à Zach Bonham, en réponse à une autre question pour trouver ces liens.

30voto

Aliostad Points 47792

Option 1

Utiliser le suivi des messages de journalisation.

Jetez un oeil ici et ici.


Option 2

Vous pouvez toujours utiliser Fiddler pour voir les requêtes HTTP et de la réponse.


Option 3

Utilisation System.Net traçage.

7voto

user1235411 Points 51
 OperationContext.Current.RequestContext.RequestMessage 
 

ce contexte est accessible côté serveur lors du traitement de la requête. Cela ne fonctionne pas pour les opérations à sens unique

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X