2008-10-17 46 views
2

ASMX生成的測試表單對於測試操作非常方便。但是,沒有明顯的方式來包含SOAP標頭。在ASMX中測試自定義SOAP頭文件

如何在不編程客戶端的情況下測試您的頭文件以使用該服務?

回答

2

如果您關心互操作,請勿使用.net客戶端應用程序來測試.net Web服務。使用SOAPUI等適當的工具來測試您的Web服務。 www.soapui.org

這個工具是用Java編寫的,但它是免費的,並且適合測試任何類型的Web服務。

0

不是直接訪問標題,而是提供代碼訪問的抽象。例如,如果您有一個名爲「客戶」的標題,則可以提供您可以訪問的上下文類,如下所示:

string customer = MyContext.Current.Customer;

現在,您所要做的就是在您的測試類中交換模擬實現,而不需要所有管道。

但是請注意,在Web服務器之外測試ASMX並不完美,因爲它可能會丟失序列化等內容。如果您可以部署到測試服務器並測試已部署的副本,那麼結果會更好。如果你真的關心測試,WCF是一個更好的選擇,因爲你可以很容易地在測試中自主託管WCF。

1

如果我明白你在做什麼,你可以用你的asmx提供的SOAP做一個HTTP請求。如果你在瀏覽器中打開你的asmx,你會得到你的web服務中可用的方法列表。點擊你想測試的方法,你會得到一個你可以使用的SOAP請求,只需填寫你想測試的值。以下是您可以用來測試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); 
+0

-1缺少「使用」塊。 – 2009-07-21 23:38:38

1

你問

你怎麼可以測試你的頭,不編程客戶端使用該服務?

答案是你應該編寫一個客戶端來使用該服務。

將編寫代碼以使用您的服務的開發人員將被迫編寫一個客戶端,該客戶端使用您的設計糟糕,難以使用的服務以及其奇怪的標頭。在他們做之前,最好找出{設計不好,很難使用,奇怪的}。

這樣,您可以重新設計服務{設計良好,使用樂趣,正常}。

順便說一句,爲你的web服務編寫單元測試是一個很好的方法來做到這一點。那樣,你就有了小而簡單的客戶。