IIS 中如何处理 WCF 请求
How WCF request is handled in IIS
我正在从事一个提高 WCF 服务性能的项目。我们在 IIS 服务器上托管了 WCF 服务。
我浏览了各种文章以了解从 WCF 客户端到 WCF 服务请求处理的端到端流程。
请澄清以下问题:
- 当 WCF 请求来自客户端时,IIS 会发生什么情况?
- IIS 如何识别请求是针对特定 WCF 服务的(假设 IIS 中托管了多个 WCF 服务)?
- IIS 如何将请求处理委托给 WCF 服务?
- 谁负责创建 WCF 服务实例?
- ASP.Net工作线程如何进入WCF服务处理请求?
- 应用程序池设置在 WCF 服务请求处理中的作用是什么?
对托管在 IIS 上的 WCF 服务的请求由 WAS(Windows 激活服务)处理,它将激活体系结构与 IIS 分离。
WAS 负责处理 WCF 服务的请求/响应。
以下是当针对托管在 WAS 上的 WCF 服务的 http 请求到达时发生的高级情况
- 请求首先由 http.sys 内核接收。
- 一个新的 WAS 服务负责配置应用程序池,
除其他事项外。
- WWW 服务负责激活应用程序池和
请求队列来处理传入的请求。此外,这
服务有一个新的 HTTP Listener Adapter 将请求转发到
HttpHandler 来处理请求(不需要
aspnet_isapi.dll).
牢记以上几点,以下是我能想到的最佳答案。
假设您的 WCF 服务正在侦听 HTTP 协议
1.当 WCF 请求来自客户端时,IIS 会发生什么?
一切都发生在 WAS 而不是 IIS 中。
当协议侦听器 (HTTP.sys) 接收到客户端请求时,WAS 会确定工作进程是否处于 运行ning 状态。如果应用程序池已经有一个正在为请求提供服务的工作进程,侦听器适配器会将请求传递给工作进程进行处理。如果应用程序池中没有worker进程,WAS会启动一个worker进程,以便监听适配器将请求传递给它处理。
侦听器适配器是 WAS 的一部分。然后请求流入工作进程(w3wp.exe 由 WAS 激活)应用程序域,该应用程序域具有处理此请求的 HTTP 模块和 HTTP 处理程序(不需要 aspnet_isapi.dll)。
2。 IIS 如何识别请求是针对特定 WCF 服务的(假设 IIS 中托管了多个 WCF 服务)?
创建工作进程实例 (w3wp.exe) 并加载应用程序代码以及该工作进程中的其他组件/网络协议的不是 IIS,而是 WAS。传入请求的终结点地址包含 WCF 服务名称。 SOAP 消息还包含客户端调用的方法和服务 (class) 名称。 Channel Dispatchers 和 Endpoint Dispatchers 使用此信息激活 class 实例并调用目标方法。
Channel and Endpoint Dispatchers
3。 IIS 如何将请求处理委托给 WCF 服务?
它的 WAS 再次将请求委托给特定的 WCF 服务,它在请求进入时识别该服务。
4.谁负责创建 WCF 服务实例?
调度器负责接受新通道、接收消息、操作调度和调用,以及响应处理。问题 # 2 的答案描述了这一点。
5. ASP.Net 工作线程如何进入 WCF 服务处理请求?
在 IIS 7 及更高版本中,Windows进程激活服务 (WAS) 代替 WWW 管理应用程序池配置和工作进程 Service.It 管理 HTTP 和非HTTP 请求。
HTTP 侦听器适配器负责桥接 WAS 和 ASP.Net 工作进程之间的请求。对于 HTTP 请求,适配器由 www 服务 (w3svc) 提供。
6.应用程序池设置在 WCF 服务请求处理中的作用是什么?
应用程序池中的所有应用程序共享一组共同的 运行 时间特征。例如,它们都 运行 在相同版本的通用语言 运行time (CLR) 下,并且它们都共享一个共同的进程标识。每个应用程序池对应一个工作进程实例 (w3wp.exe)。共享应用程序池中的每个托管应用程序 运行 都通过 CLR AppDomain 与其他应用程序隔离。
请求到达 ServiceHost 进程后,WCF 通道调度程序将其拾取并转发给特定的端点调度程序,后者会调用负责处理请求的方法(端点)。
参考文献:
- 学习 WCF:Michele Leroux Bustamante 的实践指南
- http://devproconnections.com/net-framework/iis-and-was-hosting-architecture
- https://msdn.microsoft.com/en-us/library/ms734677(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/ms789006(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/ms734665.aspx
- https://www.iis.net/learn/get-started/introduction-to-iis/introduction-to-iis-architecture#WAS
我正在从事一个提高 WCF 服务性能的项目。我们在 IIS 服务器上托管了 WCF 服务。 我浏览了各种文章以了解从 WCF 客户端到 WCF 服务请求处理的端到端流程。
请澄清以下问题:
- 当 WCF 请求来自客户端时,IIS 会发生什么情况?
- IIS 如何识别请求是针对特定 WCF 服务的(假设 IIS 中托管了多个 WCF 服务)?
- IIS 如何将请求处理委托给 WCF 服务?
- 谁负责创建 WCF 服务实例?
- ASP.Net工作线程如何进入WCF服务处理请求?
- 应用程序池设置在 WCF 服务请求处理中的作用是什么?
对托管在 IIS 上的 WCF 服务的请求由 WAS(Windows 激活服务)处理,它将激活体系结构与 IIS 分离。 WAS 负责处理 WCF 服务的请求/响应。
以下是当针对托管在 WAS 上的 WCF 服务的 http 请求到达时发生的高级情况
- 请求首先由 http.sys 内核接收。
- 一个新的 WAS 服务负责配置应用程序池, 除其他事项外。
- WWW 服务负责激活应用程序池和 请求队列来处理传入的请求。此外,这 服务有一个新的 HTTP Listener Adapter 将请求转发到 HttpHandler 来处理请求(不需要 aspnet_isapi.dll).
牢记以上几点,以下是我能想到的最佳答案。
假设您的 WCF 服务正在侦听 HTTP 协议
1.当 WCF 请求来自客户端时,IIS 会发生什么?
一切都发生在 WAS 而不是 IIS 中。
当协议侦听器 (HTTP.sys) 接收到客户端请求时,WAS 会确定工作进程是否处于 运行ning 状态。如果应用程序池已经有一个正在为请求提供服务的工作进程,侦听器适配器会将请求传递给工作进程进行处理。如果应用程序池中没有worker进程,WAS会启动一个worker进程,以便监听适配器将请求传递给它处理。
侦听器适配器是 WAS 的一部分。然后请求流入工作进程(w3wp.exe 由 WAS 激活)应用程序域,该应用程序域具有处理此请求的 HTTP 模块和 HTTP 处理程序(不需要 aspnet_isapi.dll)。
2。 IIS 如何识别请求是针对特定 WCF 服务的(假设 IIS 中托管了多个 WCF 服务)?
创建工作进程实例 (w3wp.exe) 并加载应用程序代码以及该工作进程中的其他组件/网络协议的不是 IIS,而是 WAS。传入请求的终结点地址包含 WCF 服务名称。 SOAP 消息还包含客户端调用的方法和服务 (class) 名称。 Channel Dispatchers 和 Endpoint Dispatchers 使用此信息激活 class 实例并调用目标方法。
Channel and Endpoint Dispatchers
3。 IIS 如何将请求处理委托给 WCF 服务?
它的 WAS 再次将请求委托给特定的 WCF 服务,它在请求进入时识别该服务。
4.谁负责创建 WCF 服务实例?
调度器负责接受新通道、接收消息、操作调度和调用,以及响应处理。问题 # 2 的答案描述了这一点。
5. ASP.Net 工作线程如何进入 WCF 服务处理请求?
在 IIS 7 及更高版本中,Windows进程激活服务 (WAS) 代替 WWW 管理应用程序池配置和工作进程 Service.It 管理 HTTP 和非HTTP 请求。
HTTP 侦听器适配器负责桥接 WAS 和 ASP.Net 工作进程之间的请求。对于 HTTP 请求,适配器由 www 服务 (w3svc) 提供。
6.应用程序池设置在 WCF 服务请求处理中的作用是什么?
应用程序池中的所有应用程序共享一组共同的 运行 时间特征。例如,它们都 运行 在相同版本的通用语言 运行time (CLR) 下,并且它们都共享一个共同的进程标识。每个应用程序池对应一个工作进程实例 (w3wp.exe)。共享应用程序池中的每个托管应用程序 运行 都通过 CLR AppDomain 与其他应用程序隔离。
请求到达 ServiceHost 进程后,WCF 通道调度程序将其拾取并转发给特定的端点调度程序,后者会调用负责处理请求的方法(端点)。
参考文献:
- 学习 WCF:Michele Leroux Bustamante 的实践指南
- http://devproconnections.com/net-framework/iis-and-was-hosting-architecture
- https://msdn.microsoft.com/en-us/library/ms734677(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/ms789006(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/ms734665.aspx
- https://www.iis.net/learn/get-started/introduction-to-iis/introduction-to-iis-architecture#WAS