考虑将传入SOAP请求记录到ASP的要求.NET ASMX web服务.任务是捕获发送到web服务的原始XML.

需要记录传入消息以进行调试判断.该应用程序已经在使用其自己的日志(log)库,因此理想的用法如下所示:

//string or XML, it doesn't matter.
string incomingSoapRequest = GetSoapRequest();

Logger.LogMessage(incomingSoapRequest);
  • 有什么简单的解决方案可以捕获传入SOAP请求的原始XML吗?
  • 要访问此对象和相关属性,您将处理哪些事件?
  • IIS是否可以捕获传入请求并将其推送到日志(log)?

推荐答案

捕获原始消息的一种方法是使用SoapExtensions.

SoapExtensions的另一种 Select 是实现IHttpModule,并在输入流传入时抓取它.

public class LogModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += this.OnBegin;
    }

    private void OnBegin(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        HttpContext context = app.Context;

        byte[] buffer = new byte[context.Request.InputStream.Length];
        context.Request.InputStream.Read(buffer, 0, buffer.Length);
        context.Request.InputStream.Position = 0;

        string soapMessage = Encoding.ASCII.GetString(buffer);

        // Do something with soapMessage
    }

    public void Dispose()
    {
        throw new NotImplementedException();
    }
}

Asp.net相关问答推荐

将 Response.Headers.Add 替换为方法属性decorator

在这个 For 循环计数没有增加

如何在运行时判断动态数据类型的类型?

如何调试 Azure 500 内部服务器错误

ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

使用域用户的 SQL 连接字符串?

aspx 文件中的 if 语句

使用 NancyFx 的好处?

HttpModules 的执行顺序是如何确定的?

发布网站项目时临时路径太长

不能在 DropDownList 中 Select 多个项目

*.csproj 中的 usevshostingprocess 是什么?

不同域的登录页面

如何使用restsharp下载文件

如何将代码中的变量调用到aspx页面

在 ASP.NET Web API 2 中禁用 *all* 异常处理(为我自己腾出空间)?

在.net的内存数据库中

ASP.Net 哪个用户帐户在 IIS 7 上运行 Web 服务?

使用 jQuery 从 asp:RadioButtonList 读取选定的值

无法使用 ip:port 访问 WEB API,但可以在 VS 调试模式下使用 localhost:port