7

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

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

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

提前致谢

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

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

4

7 回答 7

3

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

这是一个关于 .NET 中 AOP 框架的问题:

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

于 2012-12-19T21:30:32.213 回答
3

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

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

这就是为什么如果要监视对 Windows Azure 服务的所有调用,就需要使用 HTTP 代理之类的低级别的东西。

于 2013-01-08T13:04:57.387 回答
0

您可以使用动态代理生成拦截对底层对象的调用的类,记录有关调用的详细信息,然后转发它们。

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

于 2012-12-19T21:30:35.927 回答
0

您正在寻找面向方面的解决方案。像PostSharp这样的东西应该适合你。我已经成功地使用了它。不确定是否有其他免费选项可用。

于 2012-12-19T21:30:40.293 回答
0

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

于 2013-01-09T02:54:55.690 回答
0

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

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

相关链接可以找到:

装饰代理

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

动态方法调用

于 2013-01-09T10:56:44.087 回答
0

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

于 2013-01-09T12:10:34.233 回答