通过异步Web服务调用同时从SSRS运行多个报告

时间:2012-08-30 18:42:34

标签: web-services asynchronous reporting-services ssrs-2008

我有一个小批量程序,其工作是使用各种参数调用SSRS 2008 Web服务并路由生成的报告。 (由于各种原因,SSRS订阅在此环境中无效。)

目前,它使用Parallel类一次运行多个报告,并利用报表服务器处理多个同时请求的能力。但是我已经读过(在评论here中)这不是要走的路:因为我们在客户端的多个线程上传播的是I / O而不是处理负载,所以做的是对Web服务进行异步调用并等待结果。

VS 2010为我生成了一个包含xxxxAsync方法和xxxxCompleted事件的Web服务客户端。设置几个调用方法相对简单,一个调用Web服务Render2Async方法,另一个调用Render2AsyncCompleted

但现在我处于陌生的领域。首先,这打破了我的所有测试。如何测试异步Web服务:通过编写异步测试?我的应用程序是否需要触发自己的EventCompleted消息,以便测试可以知道应用程序已完成给定的报告并且测试可以继续?

其次,如何防止应用程序过早终止?我已经阅读了WaitHandle及其方法,但是WaitHandle.WaitAll假设您可以访问所有任务中的等待句柄,并且Web服务客户端不会公开任何等待句柄。 Render2Async方法没有返回值。

非常感谢。

1 个答案:

答案 0 :(得分:1)

NUnit支持delayed constraint 'After',允许您在这种情况下定期轮询测试。 herehere之后的NUnit示例。它在技术上并不全面,因为它是一种简单的轮询解决方案,但它易于使用,并且可以在一些简单的情况下工作。

Microsoft的Silverlight测试框架使用EnqueueXXX方法提供了更全面的支持,如文章herehere所示。

最后,使用ManualResetEvent进行单元测试的“手动”方式也显示在this article中。