如何集成WCF服务和IIS,传入请求的体系结构和流程是什么

时间:2011-10-20 08:52:27

标签: wcf architecture iis-7 basichttpbinding channelfactory

我最近在技术上测试了一个WCF服务并且已经达到了这样的程度,我缺乏理解不允许我前进并找到解决我们看到的超时问题的方法。

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

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

我的理解:

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

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

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

我也知道如何将一个应用程序池变成一个webgarden,我已经读过你可以增加每个核心的线程数,默认值为12;这是通过注册表设置或稍后在.net中进行的Web配置更改。

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

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

任何人都可以帮助我获得更清晰的图片,并帮助我将一些额外的知识用于更完整的事情吗?

1 个答案:

答案 0 :(得分: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.当然这取决于您的实施,但是defualt肯定会损害我的测试和生产系统的性能。