在WebMethod中序列化MethodBase和Exception类型

时间:2010-11-08 20:18:11

标签: .net exception serialization logging asmx

我们正在尝试创建一个简单易用的Web服务来记录异常和消息。

理想情况下,Web方法声明看起来像这样

public int LogException(MethodBase methodBase, Exception exception)
public int LogMessage(MethodBase methodBase, string message, string data)

但这不起作用,因为当您添加对Web服务的引用时,它会创建自己的类,而System.Reflection.MethodBase与LogService.MethodBase的类型不同。并且MethodBase或Exception都没有很好地序列化。而且我也想要异常来获取它的数据值。

你会如何将这两个对象传递给web方法?

我们希望只传递这两个对象的原因是,在它们之间,我们可以获得跟踪错误所需的99%的数据。它们包含堆栈跟踪信息,方法名称和它们所在的类等等。通过向Exception.Data添加一些信息,您可以在调用时获得参数值。并且,这简化了对其他开发人员的调用,并且希望使他们更有可能使用通用记录器,而不是总是自己编写。由于每个记录器不同,目前正在证明是麻烦的,并且大多数似乎不包括追踪错误所需的所有细节。

通过这样做,我们可以标准化返回的值和电子邮件格式,并通过更改一项服务对所有应用程序日志记录进行更改。

1 个答案:

答案 0 :(得分:4)

请不要这样做。

您不应使用Web服务传递特定于平台的数据。 MethodBase等特定于.NET,而Web服务基础结构并不适合它。

为什么要Web服务进行日志记录?请改用类库。由于Web服务出现问题,您不希望日志记录失败。

最后,如果您必须这样做,请不要使用ASMX Web服务来执行此操作 - 使用WCF,这将允许您在客户端和服务上使用相同的类型。

也许更重要的是,WCF将允许您使用MSMQ作为传输,以便您可以使用可靠的队列来确保最终记录您的日志消息。

我仍然怀疑你真的想要发送MethodBase - 而是发送MethodBase中的数据。您将如何处理.NET版本依赖项?