我有一个全局请求过滤器,我想使用 log4net 记录所有 http 流量 - 公司限制。问题是 InputStream 总是 lenght = 0。soap 信封正确反序列化并且服务执行成功,但第一次序列化后 inputstream 不可用。如果我想记录所有传入和传出的 http 流量,这是错误的方法吗?我应该怎么做才能做到这一点?我不想记录反序列化的 requestDto。
this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
LogManager.LogFactory.GetLogger(this.GetType()).Info(httpReq.GetRawBody());
});
方法中的 ServiceStack.WebHost.Endpoints.Support.SoapHandler 类型似乎发生错误,其中 using 语句关闭流而不缓冲它:
protected static Message GetRequestMessage(Stream inputStream, MessageVersion msgVersion)
{
using (var sr = new StreamReader(inputStream))
{
var requestXml = sr.ReadToEnd();
var doc = new XmlDocument();
doc.LoadXml(requestXml);
var msg = Message.CreateMessage(new XmlNodeReader(doc), int.MaxValue,
msgVersion);
return msg;
}
}
当我尝试在 ServiceStack.WebHost.Endpoints.Extensions 类型上访问 GetRawBody 时,将执行以下逻辑:
public string GetRawBody()
{
if (bufferedStream != null)
{
return bufferedStream.ToArray().FromUtf8Bytes();
}
using (var reader = new StreamReader(InputStream))
{
return reader.ReadToEnd();
}
}
在这里,我希望输入流被缓冲,因为它 Inputstreaem 不再可用(长度 = 0)。
这不是一个错误吗?