0

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

捕获对 ASP.NET ASMX Web 服务的 SOAP 请求

代码如下:

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 消息并确保我可以在流中捕获它们?任何提示或链接将不胜感激,谢谢。

4

1 回答 1

0

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

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

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

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

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

于 2013-05-11T18:15:52.583 回答