2011-11-30 54 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