7 c# asp.net wcf elmah error-reporting
我有一个托管在IIS/ASP.NET中的WCF服务,它接受序列化对象的HTTP Post(不是表单发布).
如果客户端发送格式错误的请求(例如,他们没有正确序列化对象),我想记录发送的消息.
我们已经使用ELMAH来捕获未处理的异常,因此只需附加发布数据就是最简单的选择.
我可以在异常期间获取当前的HttpContext,但是这只包含HTTP标头信息.
我的问题是:有没有办法捕获原始的HTTP POST请求体?或者,失败 - 更好的方法(没有反向代理)捕获导致错误的输入?
编辑:只是为了澄清,始终运行数据包级捕获并不合适.我正在寻找一个可以部署到生产服务器的解决方案,它将拥有我们无法控制或监控能力的客户端.
编辑#2:建议访问Request.InputStream - 如果您在WCF已从流中读取请求后尝试读取,则此操作无效.
我在这里看到了一个示例代码,以了解我是如何尝试使用它的.
StringBuilder log = new StringBuilder();
var request = HttpContext.Current.Request;
if (request.InputStream != null)
{
log.AppendLine(string.Format("request.InputStream.Position = \"{0}\"", request.InputStream.Position));
if (request.InputStream.Position != 0)
{
request.InputStream.Seek(0, System.IO.SeekOrigin.Begin);
}
using (StreamReader sr = new StreamReader(request.InputStream))
{
log.AppendLine(string.Format("Original Input: \"{0}\"", sr.ReadToEnd()));
}
}
else
{
log.AppendLine("request.Inputstream = null");
}
log.ToString();
Run Code Online (Sandbox Code Playgroud)
log.ToString()的输出是:
request.InputStream.Position = "0"
Original Input: ""
| 归档时间: |
|
| 查看次数: |
4692 次 |
| 最近记录: |