Question

Le formulaire de test généré par ASMX est très pratique pour les opérations de test. Cependant, il n’existe aucun moyen apparent d’inclure les en-têtes SOAP.

Comment pouvez-vous tester vos en-têtes sans programmer un client pour utiliser le service?

Était-ce utile?

La solution

Si vous vous souciez de l'interopérabilité, n'utilisez pas d'applications clientes .net pour tester les services Web .net. Utilisez un outil approprié tel que SOAPUI pour tester votre service Web. www.soapui.org

L’outil est écrit en Java, mais il est gratuit et extrêmement pratique pour tester tout type de service Web.

Autres conseils

Si je comprends ce que vous essayez de faire, vous pouvez simplement faire une requête HTTP en utilisant le SOAP fourni par votre asmx. Si vous ouvrez votre asmx dans le navigateur, vous obtenez une liste des méthodes disponibles dans votre service Web. Cliquez sur la méthode que vous souhaitez tester et vous obtiendrez une requête SOAP que vous pourrez utiliser. Il vous suffira de renseigner les valeurs que vous souhaitez tester. Vous trouverez ci-dessous le code que vous pouvez utiliser pour tester SOAP.

// Set SOAP Message
string msg = "<?xml version='1.0' encoding='UTF-8'?><soap:Envelope>";
...
...

// Make http request
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://linktoyour/service.asmx");

req.Headers.Add("SOAPAction", "http://linktoyour/NameOfFuntion");

req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg);

req.ContentLength = bytes.Length;

System.IO.Stream st = req.GetRequestStream();
st.Write(bytes,0,bytes.Length);
st.Close();

// Read response
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
System.IO.Stream st1 = res.GetResponseStream();

System.IO.StreamReader sr = new System.IO.StreamReader(st1, System.Text.Encoding.UTF8);

string txt = sr.ReadToEnd();

// Display response
Response.Write(txt);

Vous avez demandé

  

Comment pouvez-vous tester vos en-têtes sans programmer un client pour utiliser le service?

La réponse est que vous devez programmer un client pour utiliser le service.

Les développeurs qui écriront le code pour utiliser votre service vont être contraints d'écrire un client qui utilise votre service mal conçu et difficile à utiliser avec ses en-têtes étranges. Il vaut mieux que vous en appreniez sur {mal conçus, difficiles à utiliser, étranges} avant qu’ils ne le fassent.

Ainsi, vous pourrez redéfinir le service pour le rendre {bien conçu, convivial, normal}.

BTW, la rédaction de tests unitaires pour votre service Web est un bon moyen de le faire. De cette façon, vous avez de petits clients simples.

Au lieu d’accéder directement aux en-têtes, indiquez une abstraction à laquelle votre code accède. Par exemple, si vous avez un en-tête appelé "Client", vous pouvez fournir une classe de contexte à laquelle vous pouvez accéder comme suit:

string customer = MyContext.Current.Customer;

Maintenant, tout ce que vous avez à faire est d’échanger une implémentation fictive dans vos classes de test qui ne nécessite pas toute la plomberie.

Notez cependant que tester ASMX en dehors d'un serveur Web n'est pas tout à fait idéal, car il peut rater des tâches telles que la sérialisation. Si vous pouviez déployer sur un serveur de test et tester la copie déployée, ce serait mieux. Si vous vous souciez vraiment des tests, WCF est une meilleure option car vous pouvez héberger WCF assez facilement dans les tests.

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