我的System.Web.Services.WebService
包含多个WebMethods
。如果这些WebMethods
中的任何一个引发异常,我想记录传递给该WebMethod的值。我希望以足够通用的方式处理这个问题,无论参数的数量或类型如何,我都可以使用相同的方法。我以为我会记录原始JSON,但我无法确定如何访问它。我在整个Context.Request对象(包括InputStream
属性)中搜索过而没有找到它。
以下是我想做的事情:
[WebMethod(EnableSession = true)]
public IEnumerable MyWebMethod(int a, string b)
{
try
{
//do something
}
catch (Exception e)
{
LogException(e, this.Context);
throw;
}
}
//All WebMethods should be able to call LogExceoption regardless of param type/count
protected void LogException(Exception ex, HttpContext context)
{
string parameters = context.Request. //?? i don't know how to get to the JSON
//write exception detail to log
}
我正在使用带有.net Framework 3.5的C#
答案 0 :(得分:3)
以下是访问原始JSON的方法:
protected void LogException(Exception ex, HttpContext context)
{
context.Request.InputStream.Position = 0;
string rawJson = null;
using (StreamReader reader = new StreamReader(context.Request.InputStream))
{
rawJson = reader.ReadToEnd();
}
//write exception detail to log
}
答案 1 :(得分:0)
请参阅:http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension(VS.71).aspx
请参阅示例中的TraceExtension。它处理所有Web方法并将结果记录到文件中。应该直截了当地适应您的需求。