我必须对一堆相互依赖的服务进行性能/负载测试。它们都使用net.tcp,大多数使用双工合同和内部排队。 [handrolled POCO队列类使用lock(syncRoot){if(queue.Empty)Thread.Wait(); }]
以下是我提出的方法:
问题:
答案 0 :(得分:1)
WCF服务的性能测试可以通过多种方式完成:使用Microsoft Team Test,Borland Silk Performer,Mercury LoadRunner等测试工具,或类似LoadGen或自定义测试工具。我倾向于尝试采用您在创建某种功能单元测试时所做的方法,然后将数据提供给该测试,同时使用测试工具来启动该测试的多个并发实例(虚拟“用户”) 。大多数商业测试工具的工具确实促进了这种类型的测试,因此在这里很难出错。最大的挑战通常是维护测试用例和测试数据以支持测试应用程序。
WCF没有任何与性能相关的内置计数器。那实际上是一个盲点。当然,您可以看到正在向服务器建立多少连接,但这是粗略的信息,您可能想知道哪些服务正在为这些请求提供服务。有传言称微软的“都柏林”作为为WCF / WF提供丰富托管环境的一部分,将包括为托管服务提供性能计数器。我们将不得不等待,看看究竟发生了什么。
如果我需要在不影响现有代码库的情况下检测WCF服务,我会查看可以从可以应用于服务的WCF行为中获得多少里程数。此自定义行为可能会显示您可能需要的性能计数器。
是。我会关心功能测试的结果(意味着性能?)。需要注意的是,可能会有一些启动(JIT)被忽略。我可能会查看功能测试的执行情况以获取执行指标 - 但我不会在性能运行期间启用代码分析。
对于SLA而言,自定义行为可能就是答案。您可以将操作指标记录到数据库,然后报告。 Amberpoint和SOA Software等商业产品也将为此提供支持(包括性能计数器)。
将请求排队到wcf服务?我立即想到net.msmq绑定,特别是如果你想让请求持久。