调用 HSE_REQ_EXEC_URL 和 HSE_REQ_EXEC_UNICODE_URLHSE_REQ_EXEC_URL和HSE_REQ_EXEC_UNICODE_URL支持函数同步处理一个子请求,并开启ISAPI扩展重写客户端URL请求以便调用另一ISAPI扩展或重定向到一个Web文件。本主题提供使用这些支持函数的一些扩展信息。比较HSE_REQ_EXEC_URL 和 HSE_REQ_EXEC_UNICODE_URL 支持函数功能相同,不包括以下方式:HSE_REQ_EXEC_URL | HSE_REQ_EXEC_UNICODE_URLo 仅处理IIS服务器的代码页格式URL | o 仅处理Unicode字符格式URL |o IIS服务变量中pszCustomUserName参数 | o IIS服务器变量中pszCustomUserNameAUTH_USER,LOGON_USER,或 REMOTE_USER | 参数AUTH_USER,LOGON_USER,或 REMOTE_USER仅允许ANSI字符格式 | 仅允许Unicode字符格式。概述HSE_REQ_EXEC_URL和HSE_REQ_EXEC_UNICODE_URL支持函数允许调用ISAPI扩展(父)修改整个传入请求和传递修改过的请求到子应用(另一ISAPI扩展或一个Web页)。ISAPI调用是异步的,所以你必须调用 HSE_REQ_IO_COMPLETION 设置异步调用完成功能。传入请求的修改包括模拟令牌和子应用响应选择列表。HSE_REQ_EXEC_URL和HSE_REQ_EXEC_UNICODE_URL支持函数不能重定向同步应用程序缓冲池或同步目录,由于其配置使用不同身份验证方案。它们也不能过滤子应用的响应,但是它们通过IIS禁止子报头发送。存取请求数据IIS按以下方式处理请求数据: 1. 客户端使用一个请求,发送128K的数据。 2. IIS首先存取48K的数据并保存在ISAPI扩展的EXTENSION_CONTROL_BLOCK结构的lpbData参数内。 3. ISAPI扩展使用如下值调用子应用: HSE_EXEC_URL_ENTITY_INFO->cbAvailable = 1 HSE_EXEC_URL_ENTITY_INFO->lpbData = 'A' 4.子应用看到如下数据,使用32 + 1K挂起: pecb->lpbData = 'A' + (48K - 1) pecb->cbAvailable = 48K pecb->cbTotalBytes = 80K + 1相关结构的使用HSE_EXEC_URL_INFO和HSE_EXEC_UNICODE_URL_INFOtypedef struct _HSE_EXEC_URL_INFO { LPSTR pszUrl; // URL to execute LPSTR pszMethod; // Method LPSTR pszChildHeaders; // Request headers for child LPHSE_EXEC_URL_USER_INFO pUserInfo; // User for new request LPHSE_EXEC_URL_ENTITY_INFO pEntity; // Entity body for new request DWORD dwExecUrlFlags; // Flags} HSE_EXEC_URL_INFO, * LPHSE_EXEC_URL_INFO;HSE_EXEC_URL_INFO结构和HSE_EXEC_UNICODE_URL_INFO结构,使用HSE_REQ_EXEC_URL和HSE_REQ_EXEC_UNICODE_URL支持函数,调用ISAPI(父)为子应用自定义一个新请求的结构。从子请求角度看,通过HSE_EXEC_URL和HSE_EXEC_UNICODE_URL支持函数调用和通过客户端直接请求没有什么不同;服务器变量进行相应修改,请求将保持数据读取状态挂起数据,并且保留Keep-Alive状态(除了某些特殊的情况)。注释:在 *_URL_INFO结构中设置 pszUrl为 null并调用支持函数,将导致ISAPI扩展进入无限循环,除非有代码检测递归。pszChildHeaders 参数用于专有:格式测试;任何非法报头将被忽略。报尾没有两个CRLF CRLF需要,因为格式的测试会忽略为非法报头第二个CRLF。除dwExecUrlFlags之外,所有参数的值为null,意味告诉*_URL_INFO结构传递到子应用的任何值由父结构接收。任何其它值传递到请求相关部分的子应用。dwExecUrlFlags参数可以包含下面可能值: o HSE_EXEC_URL_NO_HEADERS - 若存在,父ISAPI取消通常由子应用通过IIS发送的任何报头。考虑子应用周围会出现内容的情况,父ISAPI会受到页眉或页脚横幅影响。 o HSE_EXEC_URL_IGNORE_CURRENT_INTERCEPTOR - 若存在,父ISAPI在子应用处理期间不在调用。你ISAPI对于子应用只运行一次,除非子请求递归返回同一父母URL,或子请求发生其它全局中断ISAPI以利用父ISAPI。 o HSE_EXEC_URL_IGNORE_VALIDATION_AND_RANGE - 若存在,父ISAPI自动处理,不传递到子请求的几个HTTP缓存相关报头。如 If-Match, If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,和 Range。 o HSE_EXEC_URL_DISABLE_CUSTOM_ERROR - 若存在,任何HTTP自定义错误实体发送到由父母派生的子请求处理。报头仍然返回,所以父母的ISAPI可以检测并返回自己定义的错误信息。 o HSE_REQ_GET_EXEC_URL_STATUS - 这允许父母的ISAPI从孩子的处理中接收一些基本状态信息。这仅在孩子的异步回调函数中有用,若你是HSE_REQ_EXEC_URL或HSE_REQ_EXEC_UNICODE_URL正确后调用,那么没有任何意义。HSE_EXEC_URL_USER_INFO and HSE_EXEC_UNICODE_URL_USER_INFOtypedef struct _HSE_EXEC_URL_USER_INFO { HANDLE hImpersonationToken; LPSTR pszCustomUserName; LPSTR pszCustomAuthType;} HSE_EXEC_URL_USER_INFO, * LPHSE_EXEC_URL_USER_INFO;HSE_EXEC_URL_INFO结构和HSE_EXEC_UNICODE_URL_INFO结构的pUserInfo参数结构允许父母的ISAPI通过子应用改变用户身份验证令牌的使用。最佳的作法是,获取用户令牌并设置*_URL_USER_INFO结构的hImpersonationToken参数。*_URL_USER_INFO结构的pszCustomUserName参数允许你为子应用指派新的登录用户身份。若子应用查看IIS服务器变量AUTH_USER,LOGON_USER,或REMOTE_USER,变量将引用新身份。但是,在hImpersonationToken参数确定实际资源访问。*_URL_USER_INFO结构的pszCustomAuthType参数允许你为子应用指定任意身份验证类型('Auth-Type'报头)。若子应用查看IIS服务器变量AUTH_TYPE,变量将引用一个新的身份验证名称。HSE_EXEC_URL_USER_INFO结构的pszCustomUserName和pszCustomAuthType参数结构必须为null值。HSE_EXEC_URL_ENTITY_INFOtypedef struct _HSE_EXEC_URL_ENTITY_INFO { DWORD cbAvailable; LPVOID lpbData;} HSE_EXEC_URL_ENTITY_INFO, * LPHSE_EXEC_URL_ENTITY_INFO;HSE_EXEC_URL_INFO结构和HSE_EXEC_UNICODE_URL_INFO结构的pEntity参数允许父母的ISAPI传递控制到子应用之前检查,修改和使用传入请求实体。若有挂起数据,IIS为基于父母的ISAPI的cbAvailable参数子应用结构,HSE_EXEC_URL_ENTITY_INFO结构的cbAvailable参数计算适值。若cbAvailable参数不为0,那么HSE_EXEC_URL_ENTITY_INFO结构的lpbData参数结构必须不能为null值。HSE_EXEC_URL_STATUStypedef struct _HSE_EXEC_URL_STATUS { USHORT uHttpStatusCode; USHORT uHttpSubStatus; DWORD dwWin32Error;} HSE_EXEC_URL_STATUS, * LPHSE_EXEC_URL_STATUS;HSE_EXEC_URL_STATUS结构构造传递HSE_REQ_GET_EXEC_URL_STATUS支持函数检索子请求可能已设置检索任何状态信息。HTTP子状态代码可以检索,用于检查IIS返回HTTP 4.4.2 或 HTTP 401.3错误作为子请求执行结果。
下一篇:宝可梦剑盾伊布怎么领