C# Webservice 服务端如何在代码中获得客户端soap请求报文

在 C# 中,如果你需要在 WebService 的服务端代码中获取客户端发送的 SOAP 请求报文,可以通过以下步骤实现:

获取客户端 SOAP 请求报文的步骤:

  1. 创建 WebService

    • 首先,在 C# 中创建一个 WebService,例如使用 ASP.NET 的 WebServiceWebServiceHost
  2. 拦截 SOAP 请求

    • 在服务端代码中,可以通过重写 SoapExtension 类的方式来拦截和获取 SOAP 请求和响应。
    csharp
    using System; using System.IO; using System.Web.Services.Protocols; public class SoapMessageLogger : SoapExtension { Stream oldStream; Stream newStream; // 拦截SOAP请求 public override Stream ChainStream(Stream stream) { oldStream = stream; newStream = new MemoryStream(); return newStream; } // 处理SOAP请求 public override void ProcessMessage(SoapMessage message) { if (message.Stage == SoapMessageStage.BeforeDeserialize) { Copy(newStream, oldStream); LogMessage(newStream); } if (message.Stage == SoapMessageStage.AfterDeserialize) { Copy(oldStream, newStream); } if (message.Stage == SoapMessageStage.BeforeSerialize) { Copy(newStream, oldStream); } if (message.Stage == SoapMessageStage.AfterSerialize) { newStream.Position = 0; Copy(newStream, oldStream); } } // 记录SOAP请求内容 private void LogMessage(Stream stream) { StreamReader reader = new StreamReader(stream); string soapMessage = reader.ReadToEnd(); // 可以将soapMessage输出到日志文件或进行进一步处理 Console.WriteLine("Received SOAP request:\n" + soapMessage); } private void Copy(Stream from, Stream to) { TextReader reader = new StreamReader(from); TextWriter writer = new StreamWriter(to); writer.WriteLine(reader.ReadToEnd()); writer.Flush(); } }
  3. SoapExtension 应用到 WebService

    • 将上述 SoapMessageLogger 类应用到你的 WebService 中,可以在 WebMethod 上应用或者在 WebService 类上应用。
    csharp
    [WebService(Namespace = "http://example.com/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class YourWebService : System.Web.Services.WebService { // 应用SoapExtension [SoapExtension(typeof(SoapMessageLogger))] [WebMethod] public string YourWebServiceMethod() { // 实现你的WebService方法 return "Hello World"; } }
  4. 处理和记录 SOAP 请求

    • SoapMessageLogger 类中的 LogMessage 方法中,你可以将拦截到的 SOAP 请求报文记录到日志文件中或者进行其他处理。

通过以上步骤,你可以在 C# WebService 的服务端代码中成功获取和处理客户端发送的 SOAP 请求报文内容。这种方法适用于需要在服务端分析和监控 SOAP 请求的场景。