2016-05-27 1 views

Répondre

0

J'ai cherché dans ma tête comment obtenir le contenu réel d'un message SOAP, qui est envoyé au serveur.

J'ai finalement trouvé la réponse que je voudrais partager ici avec le code très simple - basé sur https://wcfpro.wordpress.com/2011/03/29/iclientmessageinspector/

d'abord créer une application Windows Forms et ajouter une référence à un webservice SOAP.

Ensuite, créez les classes comme indiqué dans https://wcfpro.wordpress.com/2011/03/29/iclientmessageinspector/

Voir ci-dessous une copie de ce poste

public class MyBehavior : IEndpointBehavior 
{ 

    public void AddBindingParameters(
     ServiceEndpoint endpoint, 
     BindingParameterCollection bindingParameters) 
    { 
    } 

    public void ApplyClientBehavior(
     ServiceEndpoint endpoint, 
     ClientRuntime clientRuntime) 
    { 
     clientRuntime.MessageInspectors.Add(new MyMessageInspector()); 
    } 

    public void ApplyDispatchBehavior(
     ServiceEndpoint endpoint, 
     EndpointDispatcher endpointDispatcher) 
    { 
    } 

    public void Validate(
     ServiceEndpoint endpoint) 
    { 
    } 
} 

public class MyMessageInspector : IClientMessageInspector 
{ 
    public void AfterReceiveReply(ref Message reply, object correlationState) 
    { 
     // use 'reply.ToString()' te get content and do something with is 
    } 

    public object BeforeSendRequest(ref Message request, IClientChannel channel) 
    { 
     // use 'request.ToString()' te get content and do something with is 
     return null; 
    } 
} 

Et maintenant vient la partie la plus importante, ce qui m'a pris un certain temps pour comprendre. Lorsque vous créez instance du webservice:

MyServiceClient svc = new MyServiceClient(); 

Puis ajouter le comportement au service en utilisant ce code:

svc.ChannelFactory.Endpoint.Behaviors.Add(new MyBehavior()); 

Et maintenant, vous avez quelque chose que vous pouvez commencer à travailler avec!