2008-10-17 44 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服务编写单元测试是一个很好的方法来做到这一点。那样,你就有了小而简单的客户。