Перехватить запрос / ответ wcf программно - PullRequest
2 голосов
/ 30 ноября 2011

У меня есть контракт на первые службы wcf ... Я хочу программно перехватить необработанный запрос / ответ мыла на сервере и отшлифовать их перед сохранением в базе данных. Мне нужен этот процесс для некоторых целей аудита. Как это сделать?
Примечание: я не хочу делать это с трассировкой wcf путем настройки в файле web.config.

Ответы [ 2 ]

4 голосов
/ 30 ноября 2011

Вы можете реализовать свой собственный Messageinspector , я не уверен, достаточно ли это для вас, но стоит попробовать.

1 голос
/ 30 ноября 2011

Я думаю, вы можете использовать расширение SOAP

Другим решением может быть написание пользовательского HttpModule, где вы сможете манипулировать запросом до того, как он достигнет .net engine

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