繁体   English   中英

跟踪特定的方法调用

[英]Tracking specific method calls

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

这样做的困难之一是,我也想在模拟类/方法时拦截方法调用,因此该程序也可以在Azure应用程序的开发过程中的(单元测试)中使用。

所以我想知道是否有一种方法可以“订阅”一个类的方法。 当调用此方法时,将触发一个事件。 还是对于发送(例如)存储事务但被嘲笑的类还有其他(更好的)解决方案来拦截存储事务,服务总线事务,令牌请求等?

提前致谢

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

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

您指的是面向方面的编程 (AOP)。AOP处理拦截对象之间的调度消息以及它们的方法和属性。 可以执行取决于调用内容的逻辑。

这是有关.NET中AOP框架的问题:

.Net中AOP的最佳实现是什么?

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

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

因此,如果要监视对Windows Azure服务的所有调用,则需要使用HTTP代理之类的低级内容。

您可能可以使用动态代理来生成类,这些类可拦截对基础对象的调用,记录有关该调用的详细信息,然后转发它们。

我不确定您如何将其连接起来,但是希望这可以使您朝正确的方向前进。

您正在寻找面向方面的解决方案。 诸如PostSharp之类的东西应该可以为您工作。 我已经成功地使用了它。 不确定是否还有其他免费选项可用。

我们使用Trace API来跟踪方法调用-我建议阅读Windows Azure Cloud Applications中的Using Trace 一旦在Azure Tables中捕获了数据,就可以很容易地报告要跟踪的数据(类似于诊断报告)。

我做了一些我认为是现代C#设计的工作,包括代理生成和基于接口的动态方法调用。 该博客介绍了它的工作方式和使用方法。

我很确定这适用于您的情况。

相关链接可以找到:

装饰代理

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

动态方法调用

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM