Bonjour à tous,
Comment faites vous pour tracer le message SOAP que vous envoyez quand vous faites appel à un web service?
Bonjour à tous,
Comment faites vous pour tracer le message SOAP que vous envoyez quand vous faites appel à un web service?
Salut,
perso j'ai opté pour la version bourrine mais qui a l'avantage de fonctionner avec n'importe quel client SOAP (gSOAP, SoapUI ...) : wireshark.
Est-ce que les classes du framework pour les web services proposent un truc plus simple ? Je ne sais pas.
Bonne soirée.
Bonjour,
j'ai installé Wireshark portable 2.0.4, je m'en vois pour m'en servir correctement.
Dans le filtre, je met "tcp.stream eq 0" (comme sur ce lien : http://www.objis.com/formation-java/...wireshark.html), je lance l'analyse, je fais tourner mon projet .NET où je fais appel au web service, une fois le projet fermé, j'arrête l'analyse, j'ai des enregistrements qui remontent dont un sur fond rouge
Sur une ligne, je fais clic droit : suivre --> Flux TCP, je fais afficher en brut, le résultat ne ressemble pas à grand chose :
Aurais-je loupé une étape?
Merci
Un retour serait-il possible?
Salut,
si tu es en WCF tu peux enregistrer à peu près tout (avant et après éventuels filtres, etc.) juste en jouant avec le fichier *.config :
https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx
Re,
voilà comment je fais perso :
- j'épure mes requêtes qui partent vers mon serveur via son IP avec le filtre :
- je recherche ma requête (la dernière au protocole HTTP),
Code : Sélectionner tout - Visualiser dans une fenêtre à part ip.dst == 12.34.56.78
- clique droit > suivre > flux TCP
Et j'obtiens de jolies requêtes/réponses HTTP. Mais c'est pas du HTTPS comme toi (enfin il semble). Après une petite recherche j'ai trouvé ce billet. Apparemment il est possible de paramétrer son wireshark avec le certif' qui va bien pour pouvoir lire les requêtes en clair.
edit : flux TCP, et non FTP ...
Plutôt que de faire le debug à ta place (cf. ton MP) on va essayer de chercher ensemble.
La première question à se poser est : quel est le souci ?
Là tu nous parles juste de voir la requête envoyée, mais je suppose que c'est pour trouver l'origine d'un bug.
Ensuite : comment se manifeste le souci ?
Est-ce que tu as une erreur HTTP ? Un fault SOAP ?
Question subsidiaire : comment appelles-tu le serveur SOAP ?
Tu montes ta requête à la main ? Tu utilises des objets du framework ? D'une bilbi tiers ? Tout est monté en auto depuis le WSDL ?
Sinon il y a des solutions plus simples que Wireshark, comme par exemple Fiddler. Parce que Wireshark c'est bien, mais ca reste complique a prendre en main quand on est pas familier avec ce genre de choses![]()
Less Is More
Pensez à utiliser les boutons
,
et les balises code
Desole pour l'absence d'accents, clavier US oblige
Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.
Si c'est juste pour voir le contenu des enveloppes et des en-têtes, et / ou pour faire des tests en les manipulant, tu as PostMan qui est ultra-simple d'utilisation :
https://www.getpostman.com/
J'avais fais quelques années auparavant un projet en vb.net pour faire appel à un web service, là, j'aimerais essayer de migrer mon code en windev, or le soucis c'est que windev ne sait pas gérer en langage de programmation la consommation d'un web service qui requiert une authentification wsse security, la seule façon d'y arriver consiste à gérer les enveloppes soap (en windev, le fichier app.config ou web.config n'existent pas, ni même de fichier qui s'y apparente).
J'avais déjà commencé à voir cela ici, l'erreur rencontrée par Yoshi (erreur 0101) signifie que l'entête de sécurité n'est pas la bonne.
Du coup, j'aimerais récupérer l'enveloppe soap que j’envoie dans mon projet en vb.net afin de pouvoir envoyer le même depuis windev.
A quel niveau? quand je veux tracer via wireshark? quand je veux exécuter mon projet en .net?
Je n'ai aucune erreur (à part la ligne rouge que j'ai montré plus haut, bien que je ne vois pas de quoi il s'agit[/QUOTE]
J'ai édité mon fichier app.config qui est comme celui ci:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 <?xml version="1.0"?> <configuration> <configSections> </configSections> <system.web> <compilation debug="true" /> <authentication mode="Windows" /> <webServices> <soapExtensionTypes> <add type="Namesapce.className, NameSpace" priority="1" group="0" /> </soapExtensionTypes> </webServices> </system.web> <system.diagnostics> <sources> <source name="DefaultSource" switchName="DefaultSwitch"> <listeners> <add name="FileLog"/> </listeners> </source> </sources> <switches> <add name="DefaultSwitch" value="Information"/> </switches> <sharedListeners> <add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter"/> </sharedListeners> </system.diagnostics> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BillServicePortBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" useDefaultWebProxy="true"> <security mode="Transport" /> </binding> <binding name="secured"> <security mode="TransportWithMessageCredential"> <message clientCredentialType="UserName" /> </security> </binding> <binding name="BillServicePortBinding1" /> </basicHttpBinding> </bindings> <client> <endpoint address="https://www.sunat.gob.pe:443/ol-ti-itcpgem-beta/billService" binding="basicHttpBinding" bindingConfiguration="BillServicePortBinding" contract="ServiceBETA.billService" name="BillServicePort"> <headers> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsse:UsernameToken> <wsse:Username>20450835600MODDATOS</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">MODDATOS</wsse:Password> </wsse:UsernameToken> </wsse:Security> </headers> </endpoint> </client> </system.serviceModel> </configuration>
Niveau code, je fais comme cela :
Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Try Dim fichier_envoi As String = "C:\Temp\SUNAT\20450835600-01-FF11-56.zip" 'traitement pour envoyer le fichier Dim sunat_ruc As String = "20450835600" Dim sunat_usario As String = "MODDATOS" Dim sunat_clave As String = "MODDATOS" Dim usernametoken_login As String = sunat_ruc & sunat_usario Dim usernametoken_pwd As String = sunat_clave System.Net.ServicePointManager.UseNagleAlgorithm = True System.Net.ServicePointManager.Expect100Continue = False System.Net.ServicePointManager.CheckCertificateRevocationList = True Dim data As Byte() = System.IO.File.ReadAllBytes(fichier_envoi) Dim ws As New ServiceBETA.billServiceClient Dim Retour As Byte() ws.ClientCredentials.CreateSecurityTokenManager() ws.ClientCredentials.UserName.UserName = usernametoken_login ws.ClientCredentials.UserName.Password = usernametoken_pwd ws.Open() 'envoi du fichier ZIP à la SUNAT Retour = ws.sendBill("20450835600-01-FF11-56.zip", data) ws.Close() 'la réponse System.IO.File.WriteAllBytes("C:\Temp\SUNAT\R-20450835600-01-FF11-56.zip", Retour) 'MsgBox("Envoi ok") Catch ex As Exception MsgBox(ex.Message) End Try
Le fichier que j'envoi est celui ci.
@DotNetMatt : justement, j'avais commencé par Fiddler mais ça m'a provoqué pas mal de soucis, désormais, il m'est impossible de tracer avec Fiddler tout en faisant appel à mon web service, je rencontre cette erreur dans mon projet en vb.net : impossible d'établir une relation de confiance pour le canal de sécurité SSL/TLS avec l'autorité xxxxxxx
La première fois que je m'en étais servi, j'avais pu générer ce fichier de résultat de trace. Du coup, je préfère trouver une autre alternative, je pensais surtout à voir du côté de Soap Extention mais je ne suis pas sure de comprendre comment ça marche ...
@jopopmk : je ne connais pas le côté WCF en visual studio, je connais juste les parties consoles, winform et classes, je vais y jeter un oeil, tout comme ce nouveau programme que tu parles dans ton dernier message
Dernière modification par Invité ; 12/07/2016 à 11h14.
Re,
en fait tu as un souci avec ton code WinDev et du coup tu aimerais voir ce qu'envoie .NET qui lui n'a pas de souci ?
Le .NET te sert de "parapluie" mais in fine ce que tu veux c'est un code Windev fonctionnel ?
Pour l'erreur je parle de ta discussion avec le serveur, il n'y a aucune erreur dans les impressions d'écran wireshark que tu as mises.
Quand je lis ton poste Windev c'est des fault SOAP que tu obtiens, le serveur en face répond donc correctement.
Ce qu'il faut savoir c'est à quoi correspondent ces codes erreurs (en demandant sur le forum du presta ? ).
Un truc à creuser peut-être c'est le contentFile qui est défini comme base64Binary dans le WSDL mais est envoyé en multipart dans la doc.
Sinon : arrives-tu à accéder à d'autres services sur ce server ?
as-tu essayé de paramétrer wireshark pour prendre en charge ton certif' ?
Partager