我是新增的Web服务,需要捕获将发送到我的Web服务的SOAP XML消息。我发现文章说你可以从你的asmx WebMethod中读取Request.InputStream的内容。如何捕获来自外部Web服务的传入SOAP XML消息(WSDL格式)
Capturing SOAP requests to an ASP.NET ASMX web service
代码如下:
using System;
using System.Collections.Generic;
using System.Web;
using System.Xml;
using System.IO;
using System.Text;
using System.Web.Services;
using System.Web.Services.Protocols;
namespace SoapRequestEcho
{
[WebService(
Namespace = "http://soap.request.echo.com/",
Name = "SoapRequestEcho")]
public class EchoWebService : WebService
{
[WebMethod(Description = "Echo Soap Request")]
public XmlDocument EchoSoapRequest(int input)
{
// Initialize soap request XML
XmlDocument xmlSoapRequest = new XmlDocument();
// Get raw request body
Stream receiveStream = HttpContext.Current.Request.InputStream
// Move to begining of input stream and read
receiveStream.Position = 0;
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
// Load into XML document
xmlSoapRequest.Load(readStream);
}
// Return
return xmlSoapRequest;
}
}
}
不过,我很困惑,因为这要求一个整型输入参数。我想我可以删除它,但我不确定外部用户如何调用我的Web服务并向其发布XML消息。我如何对此进行测试以发送XML消息并确保我可以在流中捕获它们?任何提示或链接将不胜感激,谢谢。
感谢您的回复。我的要求是使用SOAP而不是RESTful。我认为我没有正确解释自己。我有一个将发送给我的XML的WSDL。这意味着一旦我捕获了XML,我知道如何使用读取值。我不相信我的webservice需要一个int或一个字符串,而是使用WSDL格式的XML。我必须以某种方式验证随WSDL文件一起发送的内容吗?或者我只是捕获流中的任何XML?对不起,我有点困惑。 – Stan 2013-05-11 19:33:38
您的WSDL向您显示打击您的Web服务所需的SOAP调用。现在,如果您的webservice需要XML,那么您可以将输入参数更改为XmlElement输入,而不是int输入。这样消费者就可以发送XML,并且可以在代码中解析它。看看这个[link](http://msdn.microsoft.com/en-us/library/aa480498.aspx) – eightyeight 2013-05-12 12:49:18