Frage

Die Testform von ASMX erzeugt ist ziemlich praktisch für Testvorgänge. Allerdings gibt es keine offensichtliche Möglichkeit, SOAP-Header enthalten.

Wie können Sie Ihre Header testen, ohne eine Client-Programmierung, den Dienst zu benutzen?

War es hilfreich?

Lösung

Wenn Sie über Interop kümmern, nicht .NET-Client-Anwendungen verwenden .NET Web-Service zu testen. Verwenden Sie ein geeignetes Werkzeug wie SOAPUI Ihren Web-Service zu testen. www.soapui.org

Das Werkzeug ist in Java geschrieben, aber es ist kostenlos und darn praktisch für die Prüfung jede Art von Web-Service.

Andere Tipps

Wenn ich verstehe, was Sie zu tun versuchen, können Sie nur eine HTTP-Anforderung tun, um die SOAP verwenden, die von Ihrem asmx vorgesehen ist. Wenn Sie Ihren asmx im broswer öffnen, erhalten Sie eine Liste der verfügbaren Methoden in Ihrem Web-Service. Klicken Sie auf die Methode, die Sie testen möchten, und Sie werden eine SOAP-Anforderung erhalten Sie verwenden können, füllen Sie einfach die Werte, die Sie testen möchten. Unten ist der Code können Sie die SOAP testen.

// 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);

Sie haben gefragt,

  

Wie können Sie Ihre Header testen, ohne eine Client-Programmierung, den Dienst zu benutzen?

Die Antwort ist, dass Sie ein Client-Programm sollen den Dienst zu nutzen.

Die Entwickler, die den Code schreiben Ihren Dienst zu konsumieren werden gezwungen sein, um einen Client zu schreiben, die Ihr verwendet schlecht gestaltete, schwer zu bedienenden Service mit seinen seltsamen Header. Es ist besser, Sie herausfinden, über {schlecht gestaltete, schwer zu bedienende, seltsame} bevor sie es tun.

Auf diese Weise können Sie den Dienst neu zu gestalten {gut gestaltete, Vergnügen zu bedienende, normal} sein.

BTW, ist das Schreiben von Unit-Tests für Ihren Web-Service eine gute Möglichkeit, dies zu tun. Auf diese Weise, Sie haben kleine, einfache, Kunden.

Statt direkt die Header zugreifen, stellen eine Abstraktion, die Ihren Code stattdessen zugreift. Zum Beispiel, wenn Sie einen Header namens „Kunden“ haben, können Sie eine Kontextklasse bieten Sie wie so zugreifen können:

string Kunde = MyContext.Current.Customer;

Nun, alles, was Sie tun müssen, ist Swap in einer Mock-Implementierung in Ihren Testklassen, die nicht alle Sanitär erfordern.

Beachten Sie jedoch, dass das Testen ASMX außerhalb eines Web-Servers ist nicht gerade ideal, da es Dinge wie die Serialisierung verpassen. Wenn Sie auf einem Testserver und testen Sie die bereitgestellte Kopie bereitstellen könnten, würden Sie besser dran. Wenn Sie wirklich über das Testen kümmern, WCF ist eine bessere Option, da Sie können sich selbst Host WCF ziemlich leicht in den Tests.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top