2011-11-30 98 views
2

我有一个合同第一个wcf服务...我想要在保存到数据库之前以编程方式捕获原始SOAP请求/响应@服务器并将其擦亮。我需要这个过程来达到一些审计目的。有人知道怎么做这个吗?
注意:我不想通过在web.config文件中进行配置来执行wcf跟踪。以编程方式拦截wcf请求/响应

预先感谢您...

+0

只是好奇 - 为什么你不想使用跟踪? –

+0

@TadDonaghe:大概就像我一样,他需要他人,顺便说一句,可以跟踪原始信息并保存它们吗?我期待有时回复的响应不会是wcf代理类所期望的,因为已知服务团队在开发周期后破坏合同并更改wsdl,因此需要获取原始请求/响应。 – Arjang

回答

1

我想你可以使用SOAP extension

另一种解决方案可以编写定制HttpModule在这里您将能够操纵请求时,它到达之前,.NET发动机

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(); 
    } 
} 
+0

您的肥皂延伸链接已损坏。 – Arjang

+0

SOAP扩展(和HttpModule)特定于asmx服务,而不是WCF服务([在开发将迁移到WCF的新ASMX服务时避免使用SOAP扩展...](https://msdn.microsoft.com/ EN-US /库/ ff699410.aspx)) – mlhDev