IIS configuration（IIS配置）

（以下内容，译自Category:Tutorials中的IIS configuration. 更多内容可以参看Category:Chinese. ）

本专题介绍如何进行各类微软因特网信息服务（the Microsoft Internet Information Services）配置.

文中所用的设置是根据示例目录webRPC中jsonRpcService_isApi（参见Web Services）的需要而做的，这类东西随着情况的不同而不同，不过还是很容易调整的.

jsonRpcService_isApi 工程创建的是一个 ISAPI 插件 (dll)，实现了一个JSON-RPC服务. 例子中还包括了一些客户端浏览器能够访问的HTML、CSS以及 JavaScript等相关文件. 因此，IIS的配置要满足两个方面的需求：
 * 一是文件提供者
 * 一是ISAPI服务

所有的IIS配置都在 Internet Information Services Manager 中.

配置窗口部件
要使用因特网信息服务、管理器,运行ISAPA和/或CGI的插件，先要确保计算机上它们都是可用的.

在 Programs and Features -> Turn Windows Features on or off 中，应该确保下面这些内容是可用的：
 * 因特网信息服务（Internet Information Services）
 * IIS 管理控制台
 * CGI（其实这一点并非示例 jsonRpcService_isApi 所要求的）
 * ISAPI 扩展



应用池
ISAPI服务必须运行在一个可用的应用池中，它提供了各种IIS部件的过程隔离. 这有以下优点：
 * 它使得整个IIS的鲁棒性得到加强，因为一个应用池的问题不大可能影响到其它应用池（当然了，耗尽系统资源会产生交叉影响）；
 * 各个池可以有不同的设置（比如用于.net平台的，等等）；
 * 各个池可以独立重启.

要创建应用池，在Application Pools关联菜单中选择 "Add Application Pool...". 用于Visual Prolog程序的池，并不需要任何.net平台，建议选择不需要.net支持以降低出现干扰的风险. 给池取个名字，选择"No Managed Code"（除非有其它理由需要它）. 别的就不用管了：



32比特支持
注意，缺省时应用池在64位平台上是不能运行32位程序的. 必要时可以在"Advanced Setting"中做设置：



文件服务
jsonRpcService_isApi 示例需要向运行Web应用程序的Web浏览器分发文件. 这可以设置一个“虚拟目录”或是一个“应用程序”（后者仅当程序必须运行于该Web部分时才是必须的）.



Alias 定义了在WEB中与Path相关的名称，而Physical path则定义了这个路径对应的磁盘位置. 在这里，http: //localhost/webRPC对应于C:\webRPC\web，这里就是示例中html、css以及JavaScript等文件的位置（我的情况下）.

ISAPI设置
在示例中，路径 http: //localhost/webRPC/jsonrpc 需要运行jsonRpcService_isApi ISAPI dll. 为此，我们来在虚拟目录webRPC中添加一个应用程序：



要确保该应用程序使用了所期望的应用池. 我们一般不使用物理路径，但IIS会将web.config文件放在该目录下. 创建一个新目录来放这个文件也是个不错的选择，不过这里我们就直接使用示例根目录：



放好应用程序之后就可以配置ISAPI了. 选择Handler Mappings：



接着，再添加一个 "Script Map"，与所有东西相匹配并指向ISAPI dll：



在我们的磁盘上JSON-RPC请求不属于"script"文件，所以我们得在Request Restrictions...设置中去掉 "Invoke handler only if request is mapped to" 的勾选：



如果所有设置OK，出现下图所示的情况，也就可以说OK了：



用户权限
IIS运行时，会作为Windows某类特定用户访问各类文件，因此它对这些文件必须有足够的权限.

究竟是哪一类用户，确定方法如下：


 * 若对虚拟目录或应用程序设置的是"Connect as..."用户，则这类用户可以访问文件；
 * 否则（如果使用了Pass-through授权）：
 * 如果允许匿名访问虚拟目录/应用程序，则某些IUSER_...可以访问文件；
 * 如果使用了某些Windows授权，则来自连接的windows用户可以访问文件.

Anonymous/Windows访问由Authentification图标控制.

Skype HTTP/HTTPS 冲突
Skype与HTTP/HTTPS服务是有潜在冲突的，因为缺省时Skype保留了端口80(HTTP)和443(HTTPS).

这就导致了在缺省模式下运行Skype时就不能运行HTTP/HTTPS服务器.

解决的办法是在Skype中关闭80/443端口.

还可以参看这个视频： Handling port conflicts with Skype on Windows

参考
Web Services