如何在IIS中处理WCF请求

时间:2017-03-31 07:27:17

标签: wcf iis-8

我正在开发一个项目来提高WCF服务的性能。我们在IIS服务器上托管了WCF服务。 我浏览了各种文章,了解从WCF客户端到WCF服务请求处理的端到端流程。

请澄清以下问题:

  1. 当WCF请求来自客户端时,IIS中会发生什么?
  2. IIS如何识别请求是针对特定的WCF服务(假设IIS中托管了多个WCF服务)?
  3. IIS如何将请求处理委托给WCF服务?
  4. 谁负责创建WCF服务实例?
  5. ASP.Net工作线程如何进入WCF服务处理请求?
  6. 应用程序池设置在WCF服务请求处理中的作用是什么?

1 个答案:

答案 0 :(得分:1)

对IIS上托管的WCF服务的请求由WAS( Windows激活服务)处理,后者将激活体系结构与IIS分离。 WAS负责处理WCF服务的请求/响应。

以下是http请求到达WAS托管的WCF服务时所发生的事情的高级别

  • http.sys内核首先收到请求。
  • 新的WAS服务负责配置应用程序池, 除其他外。
  • WWW服务负责激活应用程序池和 请求队列处理传入的请求。另外,这个 service有一个新的HTTP侦听器适配器,可以将请求转发给 HttpHandler处理请求(无需) ASPNET_ISAPI.DLL)。

牢记以上几点,以下是我能提出的最佳答案。

假设您的WCF服务正在侦听HTTP协议

<强> 1。当WCF请求来自客户端时,IIS中会发生什么?

一切都发生在WAS而不是IIS中。

当协议侦听器( HTTP.sys )选择客户端请求时,WAS会确定工作进程是否正在运行。如果应用程序池已具有为请求提供服务的工作进程,则侦听器适配器会将请求传递到工作进程以进行处理。如果应用程序池中没有工作进程,WAS将启动一个工作进程,以便侦听器适配器可以将请求传递给它进行处理。

侦听器适配器是WAS的一部分。然后请求流入工作进程'(由WAS激活的w3wp.exe)app域,该域具有处理此请求的HTTP模块和HTTP处理程序(不需要aspnet_isapi.dll)。

<强> 2。 IIS如何识别请求是针对特定的WCF服务(假设IIS中托管了多个WCF服务)?

它不是IIS的WAS,它创建一个工作流程实例(w3wp.exe)并在该工作进程中加载​​应用程序的代码以及其他组件/网络协议。 incomming请求具有包含WCF服务名称的端点地址。 SOAP消息还包含客户端调用的方法和服务(类)名称。 频道调度程序终结点调度程序使用此信息激活类实例并调用目标方法。

Channel and Endpoint Dispatchers

<强> 3。 IIS如何将请求处理委托给WCF服务?

它的WAS再次将请求委托给它在请求进入时识别的特定WCF服务。

<强> 4。谁负责创建WCF服务实例?

调度员负责接受新频道,接收消息,操作调度和调用以及响应处理。问题#2的答案描述了这一点。

<强> 5。 ASP.Net工作线程如何进入WCF服务处理请求?

在IIS 7及更高版本中,Windows进程激活服务(WAS)管理应用程序池配置和工作进程,而不是WWW服务。它管理HTTP和非HTTP请求的应用程序池和工作进程。

HTTP侦听器适配器负责在WAS和ASP.Net工作进程之间桥接请求。对于HTTP请求,适配器由www服务(w3svc)提供。

<强> 6。应用程序池设置在WCF服务请求处理中的作用是什么?

应用程序池中的所有应用程序共享一组通用的运行时特征。例如,它们都在相同版本的公共语言运行时(CLR)下运行,并且它们共享一个共同的进程标识。每个应用程序池对应一个工作进程的实例(w3wp.exe)。在共享应用程序池中运行的每个托管应用程序都通过CLR AppDomain与其他应用程序隔离。

一旦请求到达ServiceHost进程,WCF通道调度程序就会将其选中并转发给特定的端点调度程序,调度程序会调用负责处理请求的方法(端点)。

参考文献:

  1. 学习WCF:实践指南Michele Leroux Bustamante
  2. http://devproconnections.com/net-framework/iis-and-was-hosting-architecture
  3. https://msdn.microsoft.com/en-us/library/ms734677(v=vs.110).aspx
  4. https://msdn.microsoft.com/en-us/library/ms789006(v=vs.110).aspx
  5. https://msdn.microsoft.com/en-us/library/ms734665.aspx
  6. https://www.iis.net/learn/get-started/introduction-to-iis/introduction-to-iis-architecture#WAS