安装
将 Doconut 添加到您的 .NET Framework 4.7.2 Web 应用程序
Doconut.NETFramework 在 .NET Framework 4.7.2 的经典 ASP.NET 应用程序中托管 Doconut 查看器 — 支持 IIS、IIS Express、MVC 5 或 Web Forms。整个设置分为三部分:NuGet 包、在 Web.config 中的两项注册以及在 Global.asax 中的一次调用。本页完整说明这三步;随后可参考 快速入门 将文档放到页面上。
要求
- Web 项目目标为 .NET Framework 4.7.2 或更高版本。4.7 项目无法使用此包,请先重新定位目标框架。
- 站点必须运行在 integrated pipeline(IIS 与 IIS Express 应用程序池的默认模式)中。
本页针对 Doconut.NETFramework 26.9.0 及以后 版本进行说明。26.8.0 及更早版本面向 .NET Framework 4.7,使用不同的 API,已不再维护。跨版本升级的细节请参见 迁移。
安装包
从包管理器控制台执行:
Install-Package Doconut.NETFramework或在 SDK 风格的项目中使用:
dotnet add package Doconut.NETFramework渲染引擎已嵌入在包中:无需额外引用、复制或部署独立的引擎程序集。可选功能以独立的包形式提供,例如 Doconut.NETFramework.Converter 与 Doconut.NETFramework.Dicom,每个包都需要相应的许可证(详见 插件系统)。
配置 Web.config
Doconut 提供两类请求,IIS 通过 Web.config 对它们进行路由:
DocImage.axd— 查看器的页面、缩略图、搜索和注释端点,由Doconut.DocImageHandler处理。/doconut-res/*— 查看器自身的脚本、样式表和图标,嵌入在程序集内,由Doconut.DoconutResourceModule提供。
将上述两项以及它们依赖的设置一起添加:
<configuration>
<system.web>
<!-- MVC 5 only: Razor compiles views at run time and needs the netstandard facade. -->
<compilation targetFramework="4.7.2">
<assemblies>
<add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
</assemblies>
</compilation>
<!-- maxRequestLength is in KILOBYTES: 200 MB. -->
<httpRuntime targetFramework="4.7.2" maxRequestLength="204800" />
<!-- Read .cshtml and .aspx files as UTF-8, not as the server's ANSI code page. -->
<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- maxAllowedContentLength is in BYTES: the same 200 MB. -->
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
<modules runAllManagedModulesForAllRequests="true">
<add name="DoconutResourceModule" type="Doconut.DoconutResourceModule, Doconut" />
</modules>
<handlers>
<add name="DocImage" verb="GET,HEAD,POST" path="DocImage.axd"
type="Doconut.DocImageHandler, Doconut" />
</handlers>
</system.webServer>
</configuration>每一行配置都用于防止不会抛出异常的失败:
verb="GET,HEAD,POST"— 必须保留HEAD。查看器会对第一页发送HEAD请求以检测动画图像。如果缺少该动词,IIS 会在处理程序运行前返回404:文档仍能显示,但动画检测失效,浏览器控制台会充满 404 错误。runAllManagedModulesForAllRequests="true"—/doconut-res/*.js、.css、.png看起来像静态文件,若不启用此设置,IIS 会先交给静态文件处理程序,导致查看器缺少脚本和图标。<globalization fileEncoding="utf-8">— 页面文件若以 UTF-8(无 BOM)保存,否则会使用服务器的 ANSI 代码页读取,导致所有非 ASCII 字符在浏览器中被双重编码(例如长破折号显示为—)。文件本身是正确的,页面仍声明<meta charset="utf-8">。netstandard程序集(MVC 5) — Razor 在首次请求时编译视图,其引用列表不包含此 facade。任何超出普通成员访问的动态视图都会因CS0012编译错误而返回空的500,仅触发该错误的页面会失败。该错误只会出现在 Windows 事件日志(来源 ASP.NET)中。Web Forms 项目不需要此行。- 上传限制 — ASP.NET 在任何处理程序运行之前会先读取完整的请求体,超过限制的上传会被 IIS 用其自带的错误页面拒绝。请保持
maxRequestLength(千字节)与maxAllowedContentLength(字节)同步,并确保其大于用户可能打开或上传的最大文件。
另外还有两项设置通常已经正确,但仍需确认:
- 会话状态保持开启。 默认情况下,页面仅对打开文档的 ASP.NET 会话提供服务,因此站点不得将
<sessionState mode="Off" />设置为关闭。详情请参见 会话与安全。 - 绑定重定向。 保留 NuGet 写入
Web.config的<runtime>绑定重定向。在 SDK 风格的项目中,需要从生成的bin\<YourApp>.dll.config中复制这些重定向,因为经典 ASP.NET 只会从Web.config读取。若重定向指向bin\中不存在的版本,应用程序将在启动时因空的500错误而停止。
在 Global.asax 中注册 Doconut
System.Web 中没有构建器和中间件管道。Doconut 通过 DoconutHost.Initialize 在 Application_Start 中一次性在工作进程中组成,并在 Application_End 中通过 DoconutHost.Shutdown 释放:
// Global.asax.cs
protected void Application_Start()
{
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});
}
protected void Application_End()
{
Doconut.DoconutHost.Shutdown();
}DoconutHost.Initialize 构建处理程序、资源模块以及您自己的代码使用的服务。您的代码通过 DoconutHost.Services 访问它们(参见 DoconutHost)。只有第一次调用会进行配置;第二次调用会被忽略。在 MVC 应用程序中,还需将两个 Doconut 路径排除在路由之外——快速入门 展示了完整的 Application_Start。
所有选项
DoconutOptions 接受以下可设置属性。每个属性都是可选的。
| Property | Default | Description |
|---|---|---|
UnsafeMode | false | 为 false 时,DocImage.axd 只向打开文档的 ASP.NET 会话提供页面。为 true 时,任何携带 token 的请求都会被服务。请保持 false。 |
ShowDoconutInfo | false | 为 true 时,未带 token 的 DocImage.axd 请求会返回版本横幅而不是 404。可用于快速检查;生产环境请关闭。 |
ResourcesPath | "/doconut-res" | 资源模块提供嵌入的脚本、样式和图标的路径。仅在同时修改查看器的 ResPath 和任何 MVC IgnoreRoute 时更改。 |
LicensePath | "" | 许可证文件的完整路径。为空表示会继续尝试下一个来源,然后自动发现。 |
LicenseContent | "" | 原始许可证内容——可来自环境变量、密钥存储或数据库。 |
LicenseStream | null | 以流形式提供的许可证,在启动时读取一次。 |
MiddlewarePath | "/doconut" | 此包未使用。页面端点是 Web.config 中声明的 DocImage.axd 处理程序,无论此设置为何。仍会进行校验:必须以 / 开头且与 ResourcesPath 不同。 |
ResetLicense | false | 此包未使用。许可证在 DoconutHost.Initialize 时读取一次;更换许可证文件后请回收应用池。 |
当设置了多个许可证来源时,LicenseStream 优先于 LicenseContent,后者优先于 LicensePath,最后才是自动发现——参见 许可证设置。
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
options.ResourcesPath = "/doconut-res"; // viewer 的 JS/CSS/图片所在路径
options.UnsafeMode = false; // 保持会话安全
options.ShowDoconutInfo = false;
});
// 此处没有页面端点选项:它是 Web.config 中声明的 DocImage.axd 处理程序。后续步骤
此页面对您有帮助吗?