以编程方式拦截wcf请求/响应
问题描述:
我有一个合同第一个wcf服务...我想要在保存到数据库之前以编程方式捕获原始SOAP请求/响应@服务器并将其擦亮。我需要这个过程来达到一些审计目的。有人知道怎么做这个吗?
注意:我不想通过在web.config文件中进行配置来执行wcf跟踪。以编程方式拦截wcf请求/响应
预先感谢您...
答
我想你可以使用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();
}
}
只是好奇 - 为什么你不想使用跟踪? –
@TadDonaghe:大概就像我一样,他需要他人,顺便说一句,可以跟踪原始信息并保存它们吗?我期待有时回复的响应不会是wcf代理类所期望的,因为已知服务团队在开发周期后破坏合同并更改wsdl,因此需要获取原始请求/响应。 – Arjang