2012-06-28 54 views
1

我有这个奇怪的问题。我在服务器上有3个WCF服务。经理服务是外部请求的主要入口点。另一项服务是应用程序的逻辑。第三项服务是数据库连接服务,这两项服务都涉及并且正在完成大部分工作(数据库都是这样)。服务请求在客户端在同一台服务器上进行服务时排队

当我运行请求管理器的负载测试和运行性能测试,我得到了90级不同的线程同时运行,第二个服务了约50和数据库连接只有约12

我觉得这是应用程序中的主要性能问题。当我分析这两种服务时,我发现他们确实在等待数据库服务的响应。

我试着直接对DB服务进行测试。我运行了80个线程,并在打开通道之后并在发送请求之前使用ManualEventHandler停止它们。那么当所有的准备工作完成时,我已经设置了处理程序,并在数据库连接服务中运行了大约25个线程

所以它能够处理多于12个线程。

有什么想法是怎么回事?

为什么请求排队?

一些额外的信息:

绑定是basicHttpBinding的,但我试着用同样的结果净管IPC。 我已经设置上下文模式和并发性为每次调用或每个会话倍数相同的结果。

此外,服务是自我托管。 这是体系结构的原因就是为了让多个其他服务或应用程序直接向这些服务发送请求。在这个特定的事件中,我按照描述测试它,在其他事件中,流程可能会有所不同。

+0

您是否对'ConcurrencyMode'设置进行了任何设置?请参阅:http://msdn.microsoft.com/en-us/library/system.servicemodel.concurrencymode.aspx。它对服务间通话有影响。 –

+0

为什么这个设计,如果你不介意我问?对我来说似乎是在寻求麻烦。 –

+0

@thecoon为什么会这样麻烦?你能详细说明吗? – Mithir

回答

2

这意味着这些请求正在排队中途。如果所有的服务托管在IIS上,您可以使用ASP.NET性能计数器查看每个服务级别上的挂起请求数(根据我的知识,WCF不提供这样的性能计数器)。由于@ coon认为这是错误的架构方法。每个服务调用可以被认为是昂贵的,与同时在不同层上执行相同服务的业务逻辑和数据访问操作相比。说实话,我没有看到使用这种方法的理由。

+0

我知道请求已排队,我问他们为什么排队。我知道它可能看起来错了,但是你会如何建议不同的做法,同时还允许其他客户端直接向db连接服务发送请求? – Mithir

+0

您是否配置了并发模式和限制?如果所有服务都是WCF(并且我假设它们是),并且您可以访问所有服务(并且我假设您这样做),则只能将这些合同从DB服务和业务服务移动到一个服务中。在这种情况下,您将有一个业务服务的入口点,它将直接访问DAL(而不是通过调用单独的服务)。另外,如果有客户必须仅访问DAL,那么不存在问题,因为这些DAL方法使用不同的合同在同一服务中公开。您在服务之间使用什么样的绑定? –

+0

安全性如何? –

相关问题