ASMX生成的测试表对测试操作非常方便。但是,没有明显的方法来包含SOAP头。

如何在不编程客户端的情况下测试标题以使用该服务?

有帮助吗?

解决方案

如果您关心互操作,请不要使用.net客户端应用程序来测试.net Web服务。使用像SOAPUI这样的适当工具来测试您的Web服务。 www.soapui.org

该工具是用Java编写的,但它对于测试任何类型的Web服务都是免费的,并且非常方便。

其他提示

如果我了解您要执行的操作,您可以使用asmx提供的SOAP执行HTTP请求。如果您在broswer中打开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);

你问了

  

如何在不编程客户端的情况下测试标题以使用该服务?

答案是您应该对客户进行编程以使用该服务。

将编写代码以使用您的服务的开发人员将被迫编写一个客户端,该客户端使用设计糟糕,难以使用的服务及其奇怪的标头。你最好先发现{设计糟糕,难以使用,奇怪}。

这样,您可以将服务重新设计为{精心设计,乐于使用,正常}。

BTW,为您的Web服务编写单元测试是一种很好的方法。这样,你就拥有了小而简单的客户。

不是直接访问标题,而是提供代码访问的抽象。例如,如果您有一个名为“Customer”的标题,您可以提供一个您可以访问的上下文类,如下所示:

string customer = MyContext.Current.Customer;

现在,您所要做的就是在测试类中交换一个不需要所有管道的模拟实现。

但请注意,在Web服务器之外测试ASMX并不完全理想,因为它可能会遗漏序列化等内容。如果您可以部署到测试服务器并测试部署的副本,那么您会更好。如果你真的关心测试,那么WCF是一个更好的选择,因为你可以在测试中自己主持WCF。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top