IIS configuration(IIS配置)

From wiki.visual-prolog.com

Revision as of 10:17, 11 July 2015 by Yiding (talk | contribs) (Created page with "(以下内容,译自Category:Tutorials中的IIS configuration。更多内容可以参看Category:Chinese。) 本专题介绍如何进行各类微软因特网信...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

(以下内容,译自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...设置中关掉 files on our disk so we have to switch off the switch off "Invoke handler only if request is mapped to setting in the Request Restrictions...

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 (potentially) conflicts with HTTP/HTTPS servers, because Skype (by default) reserves port 80 (HTTP) and 443 (HTTPS).

As a result you cannot run an HTTP/HTTPS server when Skype runs (in default mode).

The solution is to turn off port 80/443 in Skype.

See this video: Handling port conflicts with Skype on Windows

参考

Web Services