Skip to main content
的 .NET 版本包含一个独立的内置 Web 服务器,也可以托管在 IIS 中。本节介绍在 Windows 中托管应用程序的各种选项。 如果没有使用 IIS 的经验, 建议使用内置服务器。内置服务器会在安装时自动部署,并为服务器级管理任务提供简单界面,例如配置日志、将应用程序作为服务运行以及启用 TLS/SSL。

使用内置服务器

本节说明如何配置独立的内置 Web 服务器,包括如何托管 SSL/TLS 连接以及配置云网关(反向 SSH 隧道)。 托管在内置服务器上时,应用程序可以作为 Windows 服务运行:
  1. 右键单击任务栏中的 图标,然后单击 服务器选项
  2. 选择 作为 Windows 服务运行
  3. 保存更改。
如果需要在 Connections 系统设置 页面上安装 驱动程序,并在安装过程中遇到权限错误,请为知行之桥服务账户(默认是 Network Service)授予对 www\Web.Configwww\binwrite 权限。

托管 TLS/SSL 连接(内置服务器)

您可以要求使用 TLS,也可以继续以明文形式提供服务。本节介绍如何在 Windows 版应用程序随附的内置服务器中托管 TLS/SSL 连接。若要为 Java 版本部署 TLS/SSL,请参阅用于托管应用程序的 Java servlet 文档。
  1. 右键单击 Windows 系统托盘中的应用程序图标,然后单击 服务器选项
  2. 在 Web 服务器选项卡上,选择 启用 TLS,并选择要监听 TLS 连接的端口。
  3. 单击 TLS 服务器证书 框旁边的按钮以选择私钥证书。带私钥的证书必须安装到本地计算机证书存储区。如果没有符合条件的可用证书,请单击 创建新证书 来为此用途创建一个简单证书。
保存更改后,服务器会重新启动并开始处理 TLS 请求。

管理个人证书

证书选择对话框中可用的证书位于本地计算机的 “个人”证书存储区。若要将证书添加到 Windows 存储区:
  1. 在“运行”菜单中输入 mmc 以启动 Microsoft 管理控制台。
  2. 单击 文件 > 添加/删除管理单元
  3. 从可用管理单元表中选择 证书,然后单击 添加
  4. 选择 计算机账户 > 本地计算机
  5. 添加管理单元后,单击 证书(本地计算机)> 个人 > 证书 以显示可用证书。可使用私钥的证书会在证书图标上叠加钥匙图标。
  6. 若要将本地磁盘中的证书导入此存储区,请单击 操作 > 所有任务 > 导入。完成导入向导后,这些证书将在应用程序的证书选择对话框中可用。

云网关

云网关提供了一种简单方式,可在不更改防火墙的情况下将应用程序公开到 Internet。只要有可公开访问的 SSH 服务器, 就可以利用 SSH 反向隧道,通过该 SSH 服务器上的端口进行访问。 若要使用此功能,请右键单击系统托盘中的应用程序图标并选择 服务器选项。导航到 云网关选项卡(如下所示),并输入以下信息: 此外,您可能需要更改 SSH 服务器的配置以允许端口转发。默认 SSH 服务器配置可能并不总是允许将端口转发到非 localhost 地址。例如,如果连接到 OpenSSH 服务器,则必须在 SSH 服务器配置文件中将 GatewayPorts 属性设置为 yesclientspecified 输入这些信息后,单击 测试连接 测试与 SSH 服务器的连接,以验证所提供的信息。如果成功,应用程序重新启动后,即可通过 SSH 主机上的 转发端口 访问 。例如,如果指定 SSH 服务器 my.ssh.host转发端口 为 8401,则在浏览器中输入 https://my.ssh.host:8401 会将通信转发到运行 的本地计算机,即使无法直接访问该计算机,也可以实现公共访问。

Windows 身份验证

默认情况下,内置 Web 服务器使用 ASP.NET 的基于表单的身份验证,需要在 Web 表单(登录门户)中输入用户名/密码组合才能访问管理控制台。 也支持 Windows 身份验证,以向特定 Windows 用户或安全组授予应用程序访问权限。 在内置 Web 服务器上启用 Windows 身份验证之前,应将所有需要访问 用户 添加到 应用程序。所有 Windows AD 用户名都必须使用以下语法:DOMAIN\Username。该语法如下图所示。
必须逐个添加用户,因为不能授予整个组访问应用程序的权限。
接下来,若要启用 Windows 身份验证,请打开内置 Web 服务器配置 UI(右键单击系统托盘中的 图标并选择 服务器选项),然后切换 Web 服务器选项卡下的 身份验证类型字段。单击 保存更改。这会重新启动 Web 服务器和应用程序。 之后,已添加到 的 Windows AD 用户登录其计算机并在浏览器中导航到 时,会自动登录。

使用 IIS

支持 IIS 10,并且系统要求指定计算机必须运行 Windows 10 或 Windows Server 2016 或更高版本。如果设置 IIS 时遇到困难,请参阅 IIS 故障排除 部分。如果仍有疑问,请联系我们的支持团队以获得进一步帮助。

创建新的 Web 应用程序

此示例使用默认网站。
若要在网站上托管应用程序:
  1. 在 IIS 管理器中,展开 连接面板中的服务器节点。
  2. 展开站点节点,右键单击您的网站,然后单击 添加应用程序
  3. 在显示的 添加应用程序 对话框中输入以下信息:

配置目录权限

应用程序必须对 应用程序目录具有完全访问权限,才能使用完整功能。 在 ArcESB 2021 及更早版本中,应用程序目录和安装目录相同,默认是 C:\Program Files\ArcESB\。如果您从 的旧版本升级到 20,这很可能仍是您的应用程序目录。 2021 中,应用程序目录从安装目录中分离出来。安装目录现在是 C:\Program Files\CData\CData Arc。应用程序目录现在是 C:\ProgramData\CData\Arc\ 应用程序目录包含以下文件夹:
  • connectors
  • data
  • db
  • locks
  • logs
  • schemas
  • workspaces
安装目录包含:
  • 程序可执行文件(CData.Arc.exearc.exe)及配置文件
  • www 文件夹及子文件夹
  • www_services 文件夹及子文件夹
若要设置权限,请找到 安装的应用程序目录,并执行以下步骤:
  1. 右键单击该文件夹并单击 属性。在安全选项卡上,单击 编辑 > 添加
  2. 输入要选择的对象名称 框中输入以下内容,并替换应用程序池名称:IIS AppPool\[your-application-pool]。例如:IIS AppPool\DefaultAppPool
  3. 确保应用程序池具有以下权限:
    • 读取
    • 写入
    • 修改
    • 读取和执行
    • 列出文件夹内容
也可以使用命令行允许应用程序池访问。例如:icacls "<application directory>" /grant "IIS APPPOOL\DefaultAppPool":(OI)(M)

配置服务器权限

如果使用 sftpserver 或 ftpserver,必须确保应用程序池对为服务器配置的根目录具有正确权限。如果将根目录创建为应用程序目录路径的子目录,则在父应用程序目录及其子文件夹上设置权限通常就足够了。

防止卸载应用程序进程

IIS 可能会因多种原因关闭 Web 应用程序,包括超过空闲超时,或判定应用程序池资源使用率过高。这可能会阻止应用程序中的后台任务运行。请通过修改以下设置确保应用程序保持运行:
  1. 启用可选的应用程序初始化功能。 在 Windows Server 2016 中,打开 服务器管理器,然后单击 仪表板 > 快速入门 > 添加角色和功能。此时会打开 添加角色和功能向导。在服务器角色步骤中,单击 Web 服务器 (IIS) > Web 服务器 > 应用程序开发 > 应用程序初始化 在 Windows 10 中,打开 控制面板,然后单击 程序和功能 > 启用或关闭 Windows 功能。单击 Internet Information Services > 万维网服务 > 应用程序开发功能 > 应用程序初始化
  2. 在 IIS 管理器中,单击 连接面板中的 应用程序池
  3. 在工作区中,右键单击应用程序池并单击 高级设置
  4. 在常规设置中,将 启动模式 设置为 AlwaysRunning
  5. 在进程模型设置中,将 闲置超时 设置为 0
  6. 在 CPU 部分,将 限制间隔 设置为 0
  7. 在回收部分,将 固定时间间隔 设置为 0
  8. 在生成回收事件日志条目节点中,在回收部分下,将 固定时间间隔 设置为 False。单击 OK 按钮。
  9. 返回 IIS 管理器,右键单击您的网站并单击 管理网站 > 高级设置
  10. 在常规设置中,将 Preload Enabled 设置为 True,然后单击 OK。这可确保应用程序在回收后立即启动。

配置 ASP.NET 应用程序池回收

IIS 会定期回收,以便清理 ASP.NET 应用程序池进程。您可以改为将回收安排在非高峰时段:导航到回收部分,将 特定时间 设置为 True,并按 hh:mm:ss 格式输入回收时间。

预加载应用程序

IIS 的预加载功能允许应用程序在用户连接之前运行,从而提高性能。若要启用此功能,请在 连接面板中右键单击与 关联的 Web 应用程序,然后选择 管理应用程序 > 高级设置。在 PreloadEnabled 菜单中选择 True PreloadEnabled 设置为 True 时,IIS 会模拟用户对网站或虚拟目录默认页面的请求,以便初始化应用程序。

确认设置

若要打开应用程序,请导航到 http://localhost/arc。如果遇到任何错误,请参阅 IIS 故障排除

托管 TLS/SSL 连接(IIS)

您可以使用 TLS/SSL 保护与交易伙伴之间关键业务和关键任务通信的机密性。以下步骤假设您已经拥有可用于在服务器上启用 TLS/SSL 的证书。
  1. 在 IIS 管理器中,从 连接窗格单击网站节点。
  2. 操作窗格中单击 绑定
  3. 单击 添加并选择 HTTPS
  4. 选择服务器证书。
  5. 如果要要求 TLS/SSL,请在网站节点仍处于选中状态时,在工作区中双击 SSL/TLS 设置图标。选择 需要 SSL/TLS,然后在 操作窗格中单击 应用

Windows 身份验证

在 IIS 中托管 时,配置 使用 Windows 身份验证与使用 .NET 内置 Web 服务器 时所需的配置类似。不过,此时不是在内置 Web 服务器中进行更改,而是在 IIS 中进行必要更改。 若要在 IIS 中托管 时设置 Windows 身份验证,请执行以下步骤:
  1. 登录 ,并将所有需要访问 的 Windows AD 用户 添加到应用程序。Windows AD 用户名必须使用以下语法:DOMAIN\Username
    必须逐个添加用户,因为不能授予整个组访问应用程序的权限。
  2. 打开 IIS,停止为 配置的站点。右键单击该站点并选择 管理网站 > 停止
  3. 单击 站点以打开 主页。在 IIS 部分下选择 身份验证 此时会出现一个屏幕,列出一组身份验证方法。右键单击 表单身份验证 并选择 禁用。这会关闭默认的用户名和密码登录身份验证方法。
  4. 右键单击 Windows 身份验证 并选择 启用
  5. 在 IIS 中重新启动您的站点。
您可能需要在 IIS 中编辑 Windows 身份验证提供程序,使 IIS 在访问 时不再提示输入用户名和密码。若要从 IIS 身份验证设置中执行此操作,请右键单击 Windows 身份验证 并选择 提供程序。此时会打开提供程序列表: 确保 NTLM 位于列表顶部,使该提供程序在 进行身份验证时具有优先级。您可能需要完全移除 Negotiate 才能停止用户名和密码提示。 在 IIS 中正确配置 Windows 身份验证后,访问应用程序时会自动以已登录的 Windows AD 用户身份登录

IIS 故障排除

以下各节提供了几种常见错误的解决方法。

注销一段时间后应用程序停止响应

IIS 可能会在应用程序因不活动而超时后卸载应用程序。默认情况下,IIS 会在应用程序不活动 20 分钟后终止分配给应用程序的工作进程。请参阅 防止卸载应用程序进程,了解如何覆盖此功能。

访问 http://localhost/application 导致“Page Cannot Be Displayed”错误(HTTP 404 错误)

这可能表示 ASP.NET 未启用。如果您可以成功浏览静态图像(如 favicon.ico,例如 http://localhost/arc/favicon.ico),但无法浏览 login.rst,则强烈表明 ASP.NET 未启用。 在 IIS 中,选择 Control Panel > Programs (or Programs and Features) > Turn Windows Features On or Off > Internet Information Services > World Wide Web Services > Application Development Features。选中 ASP.NET 旁边的复选框。

该部分在父级被锁定

锁定可能是默认设置(overrideModeDefault="Deny"),也可能由带有 overrideMode="Deny" 的 location 标记或旧版 allowOverride="false" 显式设置。 如果未安装 ASP.NET,可能会出现此错误。

HTTP 503 错误:服务不可用

如果在 IIS 中选择了之前曾与 内置 Web 服务器一起使用的端口,可能会出现此错误。这表示服务未成功启动。IIS 在启动服务时不会报告任何问题,但当您尝试访问站点时会出现此错误。发生这种情况是因为内置 Web 服务器会保留您绑定的任何端口,使其他尝试绑定到该端口的进程无法进行保留。 若要确认问题是否由端口保留引起,请打开命令提示符并运行以下命令:
这会列出计算机上的所有保留条目。如果您尝试绑定的 URL 在列表中(例如 Reserved URL : http://+:8001/),则可以使用另一个 netsh 命令删除该保留(使用 show 列表中的相同值)。例如,以下命令会删除端口 8001 的保留:

管理用户

首次启动 时,它会提示您创建具有用户名/密码凭据的用户。创建第一个用户后,可以在系统设置页面用户选项卡上添加、删除和管理用户。 请参阅用户角色以了解有关用户管理和角色的更多信息。

配置应用程序目录

应用程序目录包含应用程序使用的所有数据:配置数据、应用程序数据、日志数据、证书等。应用程序目录默认位于以下位置:
您可以将应用程序目录更改为其他文件夹,这在多种场景中很有用:
  • 集群多个 实例
  • 使用共享网络驱动器存储应用程序数据
  • 嵌入访问同一文件夹的其他系统中
更改应用程序目录会移动应用程序的数据文件,但不会移动其他应用程序资源,例如 .exe 或 .jar 文件。

更改应用程序目录

若要设置自定义应用程序目录,请打开安装目录 www 文件夹中的 Web.Config 文件。在文件底部的 <appSettings> 标记内,找到以下值:
value 后引号内的文本替换为新的应用程序目录。这可以是应用程序具有读写权限的任何本地或网络路径。

配置应用程序数据库

应用程序数据库存储多个应用程序数据表,包括:
  • 事务日志(应用程序处理的每个事务的元数据)
  • 应用程序日志(应用程序级错误和事件)
  • 访问日志(对应用程序 Web 端点的请求)
  • 审计日志(用户对 配置所做的更改)
默认情况下, 使用安装目录中的 SQLite 数据库作为应用程序数据库。此数据库建议用于最多 100,000 条事务。达到该数量后, 建议迁移到外部数据库。您可以将应用程序配置为使用 SQL Server、PostgreSQL 或 MySQL 等企业数据库。
出于安全原因,如果您切换到其他应用程序数据库,必须运行 integrityResetTampering 操作来重置哈希链。
应用程序数据库在安装目录 www 文件夹中的 Web.Config 文件中配置。该文件包含一个注释掉的 AppDb 块,用于说明后面的 connectionStrings 标记。请在 AppDb 键中设置目标数据库的连接字符串和提供程序名称。

设置连接字符串

以下各节提供了 Web.Config 文件中各种服务器配置的示例连接字符串。您可以以明文形式设置这些值,也可以生成加密的连接字符串来用作 connectionString 值。

SQL Server

为降低使用 SQL Server 作为应用程序数据库时发生死锁的可能性,知行软件建议确保已启用 READ_COMMITTED_SNAPSHOT。

MySQL

PostgreSQL

生成加密的数据库连接字符串

提供为应用程序数据库连接生成加密连接字符串的功能。您可以使用此加密连接字符串指定应用程序数据库,而无需在 配置文件中以明文形式存储登录凭据。若要生成加密连接字符串,请在 CData.Arc.exe 所在的安装目录中发出以下命令,并将末尾的示例字符串替换为您的连接信息:
发出命令后,命令窗口会打印加密字符串。例如:
随后,您可以使用此加密字符串替代 connectionString 的明文值,如设置连接字符串中所示。

指定默认字符集(仅限 MySQL)

对于 MySQL 8.0 及更高版本,数据库及其表的默认字符集 (charset) 为 UTF8(具体为 utf8mb4)。但是,在 MySQL 8.0 之前的版本中,默认字符集通常为 Latin1,这可能会导致包含基本拉丁字母表以外字符的数据出现问题。 如果使用较旧版本的 MySQL,可以通过将数据库配置为使用 utf8mb4 来避免这些问题。有两种方式可以进行此更改:直接更新现有数据库,或使用 MySQL 的导出和导入工具将数据迁移到新的 UTF8 编码数据库。

直接更新数据库

  1. 备份数据库:mysqldump -u root -p --default-character-set=latin1 --databases [database name] > backup.sql
  2. 将默认字符集更改为 UTF8:ALTER DATABASE [database name] CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  3. 生成 SQL 语句,将所有数据库表的默认字符集更改为 UTF8:
  4. 执行上一步生成的 SQL 语句。

使用导出和导入工具

  1. 导出数据定义语言 (DDL) 和数据:
  2. 将 schemas.sql 中的默认字符集从 CHARSET=latin1 更改为 CHARSET=utf8mb4
  3. 创建一个以 UTF8 为默认字符集的新数据库:CREATE DATABASE [new database name] CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  4. 导入到新数据库:

设置登录锁定

为防止暴力破解攻击, 会自动锁定输入错误密码次数过多的用户。默认情况下,用户在 5 分钟内输入 6 次错误密码后,第 7 次尝试失败时会被锁定 30 分钟。 您可以通过编辑安装目录 www 文件夹中的 Web.Config 文件来修改这些设置。有 3 个与锁定相关的设置:
  • LockoutFailedAttempts:触发锁定的错误密码次数(将此设置为 0 可禁用锁定)
  • LockoutMinutes:锁定持续时间(默认 30 分钟)
  • LockoutTimeCheckPeriod:失败尝试次数重置为 0 的时间段(默认 5 分钟)
这些设置都可以在 Web.Config 文件的 <appSettings> 标记下设置。例如,以下代码片段会禁用锁定: