跟踪特定方法调用

时间:2012-12-19 21:25:41

标签: c# reflection azure

目前我正在编写一个可以估算Azure应用程序成本的程序。为此,我有想法拦截将(间接)调用(Azure)服务器的所有方法。并且对于每种方法决定它所属的成本的哪个方面(例如(存储事务,服务总线事务,令牌请求等))

其中一个难点是我还想在模拟类/方法时拦截方法调用,因此该程序也可以在Azure应用程序的开发过程中用于(单元)测试。

所以我想知道是否有办法'订阅'类的方法。当调用此方法时,将触发事件。 或者是否还有其他(更好的)解决方案来拦截存储事务,服务总线事务,令牌请求等,也用于发送例如存储事务但被模拟的类?

提前致谢

编辑1: 有没有人知道是否有一些(帮助者)类/库或引用包含/知道影响Azure应用程序成本的所有类/方法?

编辑2 这是实现上述问题的好方法吗?还是有其他选择吗?

7 个答案:

答案 0 :(得分:3)

您指的是Aspect Oriented Programming(AOP。)AOP处理拦截对象及其方法和属性之间的调度消息。可以执行取决于呼叫内容的逻辑。

以下是关于.NET中AOP框架的问题:

What is the best implementation for AOP in .Net?

答案 1 :(得分:3)

创建HTTP代理并让您的应用程序通过该代理。这样您就可以真正拦截每个请求到Windows Azure存储/服务总线/ ...

虽然AOP是一个很好的解决方案,但它不适合您的需求。以CloudBlob.UploadFile方法为例。从AOP的角度来看,这是一次调用,但是如果你看一下HTTP事务的数量,这可能会超过1次调用(大型文件被分块并通过多个HTTP请求发送)。

如果您想监视对Windows Azure服务的所有调用,那么您需要使用像HTTP代理这样的低级别。

答案 2 :(得分:0)

您可以使用dynamic proxy生成拦截对基础对象的调用的类,记录有关调用的详细信息,然后转发它们。

我不确定你是如何把它连接起来的,但希望这会让你朝着正确的方向前进。

答案 3 :(得分:0)

您正在寻找面向方面的解决方案。像PostSharp这样的东西对你有用。我用它取得了很好的成功。不确定是否还有其他免费选项。

答案 4 :(得分:0)

我们使用Trace API来跟踪方法调用 - 我建议您阅读Using Trace in Windows Azure Cloud Applications。在Azure表中捕获数据后,可以轻松报告要跟踪的数据(类似于诊断报告)。

答案 5 :(得分:0)

我对我认为的现代C#设计做了一些工作,包括代理生成和基于接口的动态方法调用。该博客解释了它的工作原理以及如何使用它。

我很确定这适用于您的场景。

可以找到相关链接:

Decorator proxies

可以找到更通用的动态方法调用:

Dynamic method invocation

答案 6 :(得分:0)

您可以创建日志文件。写时间和错误或反应。这是很好的解决方案。一半我?