IIS configuration(IIS配置)

From wiki.visual-prolog.com

(以下内容,译自Category:Tutorials中的IIS configuration。更多内容可以参看Category:Chinese。)


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

文中所用的设置是根据示例目录webRPCjsonRpcService_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 扩展

IISM prerequisites 1.png IISM prerequisites 2.png


应用池

ISAPI服务必须运行在一个可用的应用池中,它提供了各种IIS部件的过程隔离。这有以下优点:

  • 它使得整个IIS的鲁棒性得到加强,因为一个应用池的问题不大可能影响到其它应用池(当然了,耗尽系统资源会产生交叉影响);
  • 各个池可以有不同的设置(比如用于.net平台的,等等);
  • 各个池可以独立重启。

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

IISM addAppPool 1.png IISM addAppPool 2.png

32比特支持

注意,缺省时应用池在64位平台上是不能运行32位程序的。必要时可以在"Advanced Setting"中做设置:

File:IISM 32bit 1.png IISM 32bit 2.png

文件服务

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

IISM add webRPC 1.png IISM add webRPC 2.png

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

ISAPI设置

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

IISM add jsonrpc 1.png

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

IISM add jsonrpc 2.png

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

IISM handlerMapping 1.png

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

IISM handlerMapping 2.png IISM handlerMapping 3.png


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

IISM handlerMapping 4.png

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

IISM handlerMapping 5.png

用户权限

IIS运行时,会作为Windows某类特定用户访问各类文件,因此它对这些文件必须有足够的权限。 run it will access various files as a certain Windows user, this user must have sufficient rights to the files.

Which user is determined like this:

  • 若对虚拟目录或应用程序设置的是Connect as..."用户,则这类用户可以访问文件; user is set for the virtual directory or application then that user will access the files
  • 否则(如果使用了Pass-through授权)Otherwise (if Pass-through authentication is used):
    • 如果允许匿名访问虚拟目录/应用程序,则某些IUSER_...可以访问文件;If annoymous access is allowed to the virtual directory/application then some IUSER_... is will access the files
    • 如果使用了某些Windows授权,则来自连接的windows用户可以访问文件。If some Windows authentification is used the windows user from the connection will will access the files

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

Skype HTTP/HTTPS 冲突

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

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

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

还可以参看这个视频:

参考

Web Services