小编kum*_*ama的帖子

在服务器端记录SOAP请求和响应

我正在尝试为我的ASP.NET Web服务的所有SOAP方法调用创建一个日志记录服务.我一直在查看 来自控制台应用程序的Log SOAP消息以及MSDN上SOAP扩展的演练(http://msdn.microsoft.com/en-us/library/s25h0swd%28v=vs.100%29.aspx)但他们似乎并没有完全覆盖它.

我不想改变SOAP消息,只需将其记录到数据库表中即可.我正在尝试做的是读取SOAP消息流,将其解析为XML,记录XML并让调用以其快乐的方式进行.但是当我读取它时,它被花费/处理掉了.我已经尝试复制流内容以不中断流.

根据演练,该ProcessMessage方法应如下所示:

public override void ProcessMessage(SoapMessage message) 
{
   switch (message.Stage) 
   {
   case SoapMessageStage.BeforeSerialize:
       break;
   case SoapMessageStage.AfterSerialize:
       // Write the SOAP message out to a file.
       WriteOutput( message );
       break;
   case SoapMessageStage.BeforeDeserialize:
       // Write the SOAP message out to a file.
       WriteInput( message );
       break;
   case SoapMessageStage.AfterDeserialize:
       break;
   default:
       throw new Exception("invalid stage");
   }
}
Run Code Online (Sandbox Code Playgroud)

我已经设法在BeforeDeserialize阶段期间解析流没有问题,但然后ProcessMessageAfterSerialize阶段再次调用,然后使用流并且不再包含任何数据.

根据SOAP消息修改使用SOAP扩展(http://msdn.microsoft.com/en-us/library/esw638yk%28v=vs.100%29.aspx),SOAP调用将执行以下步骤:

服务器端接收请求消息并准备响应

  1. Web服务器上的ASP.NET接收SOAP消息.
  2. 在Web服务器上创建SOAP扩展的新实例.
  3. 在Web服务器上,如果这是第一次在服务器端使用此Web服务执行此SOAP扩展,则会在服务器上运行的SOAP扩展上调用GetInitializer方法.
  4. 调用Initialize方法.
  5. 调用ChainStream方法.
  6. 使用设置为 …

c# asp.net soap web-services soap-extension

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

asp.net ×1

c# ×1

soap ×1

soap-extension ×1

web-services ×1