如何:用受限预留替换 WCF URL 预留

URL 预留使你能够限制谁可以接收来自某个 URL 或某一组 URL 的消息。 预留由一个 URL 模板、一个访问控制列表 (ACL) 和一组标志组成。 URL 模板定义预留所影响的 URL。 有关如何处理 URL 模板的详细信息,请参阅路由传入请求。 ACL 控制哪个用户或用户组允许接收来自指定 URL 的消息。 标志指示预留是赋予用户或用户组直接侦听 URL 的权限,还是将侦听权限委托给其他进程。

在默认的操作系统配置中,Windows Communication Foundation (WCF) 为端口 80 创建可全局访问的预留,使所有用户都能够运行使用 HTTP 双向绑定来进行双工通信的应用程序。 由于此预留的 ACL 适用于所有用户,因此管理员不能显式允许或禁止侦听某个 URL 或某一组 URL 的权限。 本主题介绍如何删除此预留,以及如何重新创建具有受限 ACL 的预留。

在 Windows Vista 或 Windows Server 2008 上,可以通过输入 netsh http show urlacl,从提升的命令提示符中查看所有 HTTP URL 预留项。 下面的示例演示 WCF URL 预留的形式:

Reserved URL : http://+:80/Temporary_Listen_Addresses/  
        User: \Everyone  
            Listen: Yes  
            Delegate: No  
            SDDL: D:(A;;GX;;;WD)  

该预留包含的 URL 模板在 WCF 应用程序使用 HTTP 双向绑定进行双工通信时使用。 这种 URL 由 WCF 服务用于在通过 HTTP 双向绑定进行通信时将消息发送回 WCF 客户端。 向每个用户授予侦听该 URL 的权限,而不将侦听权限委托给另一个进程。 最后,安全描述符定义语言 (SSDL) 中介绍了该 ACL。 有关 SSDL 的详细信息,请参阅 SSDL

删除 WCF URL 预留

  1. 单击“开始”,指向“所有程序”,单击“附件”,右键单击“命令提示符”,然后在显示的上下文菜单中单击“以管理员身份运行”。 在“用户帐户控制”(UAC) 窗口上单击“继续”(该窗口可能会请求执行继续的权限)。

  2. 在命令提示符窗口中键入 netsh http delete urlacl url=http://+:80/Temporary_Listen_Addresses/

  3. 如果成功删除了预留,将显示以下消息。 已成功删除 URL 预留

创建新的安全组和新的受限 URL 预留

若要用受限预留替换 WCF URL 预留,必须先创建新的安全组。 可以通过两种方法执行此操作:从命令提示符或从计算机管理控制台。 您只需要执行一次。

从命令提示符创建新的安全组

  1. 单击“开始”,指向“所有程序”,单击“附件”,右键单击“命令提示符”,然后在显示的上下文菜单中单击“以管理员身份运行”。 在“用户帐户控制”(UAC) 窗口上单击“继续”(该窗口可能会请求执行继续的权限)。

  2. 在命令提示符中键入 net localgroup "<security group name>" /comment:"<security group description>" /add。 请将 <安全组名称> 替换为要创建的安全组名称,并将 <安全组说明> 替换为适当的安全组说明。

  3. 如果成功创建了安全组,将显示以下消息。 命令已成功完成。

从计算机管理控制台创建新的安全组

  1. 依次单击“开始”、“控制面板”、“管理工具”和“计算机管理”,以打开计算机管理控制台。 在“用户帐户控制”(UAC) 窗口上单击“继续”(该窗口可能会请求执行继续的权限)。

  2. 依次单击“系统工具”、“本地用户和组”,右键单击“组”文件夹,然后在显示的上下文菜单中单击“新建组”。 键入新安全组所需的“组名称”、“说明”和其他详情,然后单击“创建”按钮创建安全组。

创建受限 URL 预留

  1. 单击“开始”,指向“所有程序”,单击“附件”,右键单击“命令提示符”,然后在显示的上下文菜单中单击“以管理员身份运行”。 在“用户帐户控制”(UAC) 窗口上单击“继续”(该窗口可能会请求执行继续的权限)。

  2. 在命令提示符中键入 netsh http add urlacl url=http://+:80/Temporary_Listen_Addresses/ user="<machine name>\<security group name>。 请将 <计算机名称> 替换为创建组的计算机名称,并将 <安全组名称> 替换为前面创建的安全组的名称。

  3. 如果成功创建了预留,将显示以下消息。 已成功添加 URL 预留。