代码之家  ›  专栏  ›  技术社区  ›  CaffGeek

序列化WebMethod中的MethodBase和异常类型

  •  0
  • CaffGeek  · 技术社区  · 14 年前

    我们试图创建一个简单易用的WebService来记录异常和消息。

    理想情况下,Web方法声明如下所示

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

    但这不起作用,因为当添加对WebService的引用时,它会创建自己的类,System.Reflection.MethodBase与LogService.MethodBase的类型不同。而且无论是methodbase还是exception都不能很好地序列化。我还希望异常具有它的数据值。

    如何将这两个对象传递给WebMethod?

    我们希望传递这两个对象的原因是,在它们之间,我们可以获得跟踪错误所需的99%的数据。它们包含堆栈跟踪信息、方法名和它们所在的类等…通过向exception.data添加一些信息,您可以在调用时获得参数值。而且,这简化了对其他开发人员的调用,并希望使他们更可能使用公共记录器,而不是总是滚动自己的日志。目前,由于每一个记录器都不一样,这已经证明是一个麻烦事,而且大多数记录器似乎没有包含跟踪错误所需的所有细节。

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

    1 回复  |  直到 14 年前
        1
  •  4
  •   John Saunders    14 年前

    请不要这样做。

    不应使用Web服务传递平台特定的数据。methodbase等是特定于.NET的,而Web服务基础结构并不打算容纳它。

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

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

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

    我仍然怀疑您是否真的想发送methodbase—而是发送methodbase中的数据。您将如何处理.NET版本依赖关系?