0

我最近一直在技术上测试 WCF 服务,并且已经到了这样的地步,我缺乏理解使我无法继续前进并找到解决我们看到的超时问题的方法。

我们正在对 Windows Server 2008 上的 IIS7 上托管的 WCF 服务进行负载测试。设置为触发消息的系统实际上会在 biztalk 应用程序上触发它们。Biztalk 然后处理消息并将它们发送到 WCF 服务的端点。WCF 服务也在其应用程序池中使用 .net 2.0(我想这意味着它实际上可能是 3.0 或 3.5,因为它们不是完整版本?

我们在一秒钟内发出 40 条消息,其中 90% 的消息由于客户端的发送超时(biztalk)而超时。起初我们认为这很奇怪,因为我们希望服务器的基本 http 绑定接收超时首先触发,但结果是设置为 10 分钟,客户端发送超时设置为 1 分钟和 30 秒。

我的理解:

WCF 服务具有配置文件,其中包含行为和 http 绑定。我们向其发送 XML 消息的服务器端点使用 BasicHtppBindings:Timeouts:Open/Close 为 1 分钟,发送和接收为 10 分钟。目前我们所知道的服务器超时时间是:sendtimeout: 1 分钟。

我了解 WCF 的架构通过创建通道工厂或服务主机的实例来工作,并创建一个通道堆栈,其中包含配置中的行为和绑定设置作为通道。有一个 TransportAdaptor,用于在 xml 消息通过通道堆栈处理后移动它。

我从 IIS 了解到 http.sys 处理传入的请求。它将请求传递给工作进程,当它很忙时,它将请求放入内核模式队列?我了解可以设置一些 machine.config 设置来增加此队列/限制此队列?

我也知道如何将应用程序池变成网络花园,并且我已经阅读过您可以增加每个核心的线程数,默认为 12;这是通过注册表设置或稍后在 .net 中更改 Web 配置来完成的。

我刚刚阅读了 InstanceContextMode 以及它如何影响服务器的服务......但我不确定在这种情况下设置为什么。

我们记录了一些性能计数器,.net 计数器,我注意到当前请求数减去(排队+断开)= 12。这表明我们使用的是 1 个核心?并且该内核上的线程数设置为 12。

任何人都可以帮助我获得更清晰的画面,并帮助我将一些额外的知识拼凑成更完整的东西吗?

4

1 回答 1

0

WCF 行为具有节流设置。这是一个示例(从msdn获取):

  <service 
    name="Microsoft.WCF.Documentation.SampleService"
    behaviorConfiguration="Throttled" />

…………

<behaviors>
  <serviceBehaviors>
    <behavior  name="Throttled">
      <serviceThrottling 
        maxConcurrentCalls="1" 
        maxConcurrentSessions="1" 
        maxConcurrentInstances="1"/>
    </behavior>
  </serviceBehaviors>

默认情况下(如果未指定),服务被限制为 10 个并发调用。

我发现对于运行短调用的大容量客户来说,合理的生产设置更像是 100。当然,这取决于您的实施,但默认设置肯定会损害我的测试和生产系统的性能。

于 2011-11-11T19:34:00.857 回答