【问题标题】:How to Capture incoming SOAP XML Message (WSDL format) from external web service如何从外部 Web 服务捕获传入的 SOAP XML 消息(WSDL 格式)
【发布时间】:2013-05-11 17:45:55
【问题描述】:

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

【问题讨论】:

    标签: c# xml web-services soap wsdl


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的回复。我的要求是使用 SOAP 而不是 RESTful。我认为我没有正确解释自己。我有一个将发送给我的 XML 的 WSDL。这意味着一旦我捕获了 XML,我就知道如何使用读取值。我不相信我的 web 服务需要一个 int 或一个字符串,而是 WSDL 格式的 XML。我是否必须以某种方式验证随 WSDL 文件发送的内容?还是我只是捕获流中的任何 XML?对不起,我有点困惑。
    • 您的 WSDL 向您显示了访问您的 Web 服务所需的 SOAP 调用。现在,如果您的 web 服务需要 XML,那么您可以将输入参数更改为 XmlElement 输入而不是 int 输入。这样,消费者可以发送 XML,您可以在代码中对其进行解析。看看这个link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    相关资源
    最近更新 更多