WCF - 网络成本

时间:2010-04-14 12:11:45

标签: .net wcf

我在IIS上使用basicHttpBinding和aspNetCompatibilityEnabled = true部署了一个wcf服务

我有一个测试客户端,它同时调用多个服务功能。为了检查客户端和服务器上的服务调用的性能,我计算了在客户端(代理代码)和服务器上完成服务请求所需的平均时间。

经过8小时的测试(服务器和客户端在同一台机器上)后,我发现客户端的平均响应时间大约是34ms,因为服务器上的Avg执行时间大约为3ms,因此差异为31ms。 / p>

我想知道为什么每次通话花费31毫秒是否合理?我该如何减少这个?

编辑:经过“Marc Gravell”的回复后发表

  1. 在IIS中启用SSL在WCF级别上没有其他安全性
  2. 服务执行次要数据库操作您可以通过给定3ms的平均执行时间来估算运营成本。 (如果这就是你所说的有效载荷)
  3. 没有Blob,没有MTOM
  4. 发送和接收消息不大可能在100字节到500字节左右,简单消息合同
  5. 如果有任何其他问题需要诊断,请告诉我
  6. 实际上,如果您可以解释WCF如何进行TCP连接作业以及它与可用的不同绑定有何不同,我更关心TCP连接建立的成本

3 个答案:

答案 0 :(得分:3)

经过长时间的研究和测试执行后,我得出的结论是,由于服务器上的线程调用时间而发生这种情况,因为WCF使用I / O完成端口(一种有效的线程模型。Detail here

并且您需要在服务器的开头设置可能的最小并发要求,如下所示

ThreadPool.SetMinThreads(100, 100);

否则,由于池最小大小的默认值为2,2,您将受到影响,并且任何新线程都需要创建线程的成本(每个开发人员都知道这是最昂贵的过程)。通过以上操作,Threadpool将保持至少100个线程准备工作,您的服务将摇摆不定。

因为我将腰部缩短了31ms到6ms。

答案 1 :(得分:2)

您正在执行哪些操作?即有效载荷大小是多少?如果您使用非常小的有效负载执行大量操作,那么您显然会受到延迟等的影响;然而,带宽也可能是非平凡有效载荷的问题。如果您正在遭受这种情况,您可以尝试使用其他序列化程序。如果有效载荷大小是一个可能的问题,请告诉我,因为那里可能有一些选项。

也;你使用什么安全/流媒体/等选项?基于消息的安全性在两端都比较昂贵(与传输安全性相比),并且IIRC阻止流式传输,因为整个消息必须可用才能进行验证。类似地,如果你在周围投掷blob,你可以从启用MTOM(比basic-http更有效)和使用流API中受益。

答案 2 :(得分:0)

这里有很多问题要问。 Marc开始提出一系列好问题,但最终,我想我们无法从您那里获得有关您的程序,平台和网络的足够信息,以便在线为您提供完整的答案。

如果我处于你的情况,我要做的第一件事就是进行一些分析,以了解幕后发生了什么。具体来说,我使用ProcMon来分析导致并包括网络传输的系统活动,以确保我的网络时间精确。基于这些发现,我要深入了解线路上的内容,或者使用.NET性能分析器来查看堆栈上的哪些操作会花费您最长的时间。