如何从外部Web服务捕获传入的SOAP XML消息(WSDL格式)

时间:2013-05-11 17:45:56

标签: c# xml web-services soap wsdl

我是Web服务的新手,需要捕获将发送到我的Web服务的SOAP XML消息。我发现文章说你可以从你的asmx WebMethod中读取Request.InputStream的内容。

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;
    }
  }
}

但是,我很困惑,因为这要求输入一个int参数。我想我可以删除它,但我不确定外部用户如何调用我的Web服务并向其发布XML消息。我如何对此进行测试以发送XML消息并确保我可以在流中捕获它们?任何提示或链接将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

“我是网络服务新手,需要捕获将发送到我的网络服务的SOAP XML消息。”

SOAP只是用于在Web服务的使用者和Web服务之间交换信息的协议。考虑一下各种握手,将要传递给Web服务的数据打包到SOAP信封中。 Web服务的使用者将向您发送打包到SOAP信封中的数据。这引出了一个问题 - 消费者将如何知道要发送什么?

当您打开Web服务页面时,它应显示支持的操作列表。如果单击EchoSoapRequest,您将看到应该发送到您的服务及其响应的示例SOAP请求。您需要做的就是处理用户在代码中发送的参数。

在这种情况下,您的Web服务需要一个int。使用Web服务的用户将在SOAP信封中发送一个int包。如果您希望用户发送字符串,则声明一个字符串作为输入。

PS:作为附注,如果您从头开始,您应该查看RESTful Web服务及其优势。