如何从WCF服务中的HttpContext获取有关错误的信息

时间:2015-06-05 11:49:50

标签: c# wcf logging httpcontext

当客户端将无效的SOAP请求传递给WCF服务协定时(抛出NetDispatcherFaultException),我需要记录有关合同调用的信息(以下信息:请求,客户端地址,调用的方法名称)。 我可以从Global类(Global.asax)中的HttpContext对象获取所有需要的信息,例如在Application_EndRequest事件处理程序中。我的代码(工作正常):

protected void Application_EndRequest(object sender, EventArgs e)
{
    const string InfoMessageTemplate = "Client [address='{0}'] called following contract: '{1}'. Request data: {2}";

    var currentRequest = Context.Request;
    var calledContract = currentRequest.Headers["SOAPAction"] ?? string.Empty;
    string clientAddress = currentRequest.UserHostAddress;

    var requestInputStream = new StreamReader(currentRequest.InputStream);
    string requestString = HttpUtility.UrlDecode(requestInputStream.ReadToEnd());

    Logger.Info(InfoMessageTemplate, clientAddress, calledContract, requestString);
}

但是我不想记录所有请求,只有在抛出NetDispatcherFaultException时。我建议HttpContext.Error和/或HttpContext.AllErrors属性应包含有关已发生异常的信息,但它们始终为空(等于NULL)。

我已经实现了IErrorHandler(全局异常处理)并将其连接到我的WCF服务。每次发生任何错误时都会调用HandleError方法。但我无法访问此方法中的HttpContext(因为此方法在另一个线程中执行),我无法获取所有需要的日志信息。

所以,我认为我最后的希望是Global.asax中的事件处理程序。如果我能够获得有关发生错误的信息,它将对我有很大帮助。我能以某种方式这样做吗?

0 个答案:

没有答案