如何从WCF服务中的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中的事件处理程序。 如果我能得到有关发生错误的信息,它会帮助我很多。 我能以某种方式做到这一点吗?

链接地址: http://www.djcxy.com/p/26903.html

上一篇: How to get information about error from HttpContext in WCF services

下一篇: Not supported any more?