インストール

Doconut を .NET Framework 4.7.2 の Web アプリケーションに追加する

Doconut.NETFramework は .NET Framework 4.7.2 上のクラシック ASP.NET アプリケーションで Doconut ビューアをホストします — IIS または IIS Express、MVC 5 または Web Forms。セットアップは 3 つのパートから成ります:NuGet パッケージ、Web.config への 2 つの登録、そして Global.asax での 1 回の呼び出し。このページではすべてをカバーします;クイックスタート でページにドキュメントを配置します。

必要条件

  • Web プロジェクトは .NET Framework 4.7.2 以降を対象とします。4.7 プロジェクトはこのパッケージを使用できないため、まずターゲットを変更してください。
  • サイトは 統合パイプライン で実行されます(IIS および IIS Express のアプリケーションプールのデフォルト)。

このページは Doconut.NETFramework 26.9.0 以降 を対象としています。バージョン 26.8.0 以前は .NET Framework 4.7 を対象とし、異なる API を使用していましたが、そのラインは廃止されました。その境界を越えて既存アプリケーションを更新する方法は 移行 に記載されています。

パッケージのインストール

パッケージ マネージャ コンソールから:

powershell
Install-Package Doconut.NETFramework

または、SDK スタイルのプロジェクトの場合:

bash
dotnet add package Doconut.NETFramework

レンダリング エンジンはパッケージに埋め込まれているため、別個のエンジン アセンブリを参照・コピー・デプロイする必要はありません。オプション機能はそれぞれ独自のパッケージとして提供されます(例:Doconut.NETFramework.Converter と Doconut.NETFramework.Dicom)。これらの機能を使用するには、対応するライセンスが必要です(プラグインシステム を参照)。

Web.config の構成

Doconut は 2 種類のリクエストを処理し、IIS は両方とも Web.config を通してルーティングします:

  • DocImage.axd — ビューアのページ、サムネイル、検索、注釈エンドポイントで、Doconut.DocImageHandler が提供します。
  • /doconut-res/* — ビューア自身のスクリプト、スタイルシート、アイコンで、アセンブリに埋め込まれ、Doconut.DoconutResourceModule が提供します。

以下を追加し、依存する設定も合わせて記述します:

xml
<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 を保持します。ビューアはアニメーション画像を検出するためにページ 1 に対して HEAD リクエストを送ります。verb が無いと、ハンドラが実行される前に IIS が 404 を返し、ドキュメントは表示されますがアニメーション検出が機能せず、ブラウザコンソールに 404 が大量に出ます。
  • runAllManagedModulesForAllRequests="true" — /doconut-res/*.js、.css、.png は静的ファイルのように見えるため、IIS はリソースモジュールが処理する前に静的ファイルハンドラに渡してしまいます。その結果、スクリプトやアイコンのないビューアになります。
  • <globalization fileEncoding="utf-8"> — BOM なしで UTF-8 として保存されたページファイルは、サーバーの ANSI コードページで読み込まれ、非 ASCII 文字が二重エンコードされてブラウザに届きます(例:エムダッシュが — と表示)。ファイル自体はディスク上で正しく、ページは依然として <meta charset="utf-8"> を宣言しています。
  • netstandard アセンブリ(MVC 5) — Razor はビューを最初に要求されたときにコンパイルし、独自の参照リストにこのファサードが含まれません。単純なメンバーアクセス以外の動的処理を行うビューは CS0012 エラーで失敗し、空の 500 を返します。このエラーは Windows のイベントログ(ソース ASP.NET)にのみ表示されます。Web Forms アプリケーションではこの行は不要です。
  • アップロード制限 — ASP.NET はハンドラが実行される前にリクエスト本体全体を読み取るため、これらの制限を超えるアップロードは IIS によって独自のエラーページで拒否されます。maxRequestLength(キロバイト)と maxAllowedContentLength(バイト)を同等に保ち、ユーザーが開くまたはアップロードする最大ファイルサイズを上回るように設定してください。

さらに 2 つの設定が重要で、通常はすでに正しく設定されています:

  • セッション状態は有効のまま。デフォルトでは、ページはドキュメントを開いた ASP.NET セッションにのみ提供されるため、サイトは <sessionState mode="Off" /> を設定してはいけません。セッションとセキュリティ を参照してください。
  • バインディング リダイレクト。NuGet が Web.config に書き込む <runtime> のバインディング リダイレクトを保持してください。SDK スタイルのプロジェクトでは、生成された bin\<YourApp>.dll.config からコピーします。古典的な ASP.NET は Web.config からのみリダイレクトを読み取ります。bin\ に存在しないバージョンを指すリダイレクトがあると、起動時に空の 500 エラーでアプリケーション全体が停止します。

Register Doconut in Global.asax

System.Web にはビルダーもミドルウェア パイプラインもありません。Doconut は Application_Start の DoconutHost.Initialize によってワーカープロセスごとに一度だけ構成され、Application_End の DoconutHost.Shutdown で解放されます。

csharp
// 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 を参照)。最初の呼び出しだけが設定を行い、2 回目以降は無視されます。MVC アプリケーションの場合は、2 つの Doconut パスをルーティングから除外してください — Quick Start では完全な Application_Start が示されています。

All options

DoconutOptions は以下の設定可能なプロパティを受け取ります。すべて任意です。

プロパティデフォルト説明
UnsafeModefalsefalse の場合、DocImage.axd はドキュメントを開いた ASP.NET セッションにのみページを返します。true にすると、トークンを含むすべてのリクエストに対してページが返されます。false のままにしてください。
ShowDoconutInfofalsetrue にすると、token が無い DocImage.axd リクエストに対して 404 ではなくバージョン バナーが返ります。スモークチェックに便利ですが、本番環境ではオフにしてください。
ResourcesPath"/doconut-res"リソース モジュールが埋め込みスクリプト、スタイル、アイコンを提供するパスです。ビューアの ResPath と MVC の IgnoreRoute と合わせて変更してください。
LicensePath""ライセンス ファイルへのフルパス。空文字列の場合は次のソースへフォールスルーし、最終的に自動検出へ移ります。
LicenseContent""生のライセンス コンテンツ — 環境変数、シークレット ストア、またはデータベースから取得します。
LicenseStreamnull起動時に一度だけ読み取られるストリーム形式のライセンス。
MiddlewarePath"/doconut"このパッケージでは使用されません。ページ エンドポイントは Web.config に宣言された DocImage.axd ハンドラで、設定値に関係なく機能します。なお、/ で始まり ResourcesPath と異なる必要があります。
ResetLicensefalseこのパッケージでは使用されません。ライセンスは DoconutHost.Initialize 時に一度だけ読み取られます。ライセンス ファイルを置き換えた場合はアプリケーション プールをリサイクルしてください。

複数のライセンス ソースが設定されている場合、LicenseStream が LicenseContent を上書きし、LicenseContent が LicensePath を上書きし、最後に自動検出が適用されます — 詳細は License Setup を参照してください。

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.LicensePath     = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
    options.ResourcesPath   = "/doconut-res"; // where the viewer's JS/CSS/images are served from
    options.UnsafeMode      = false;          // keep session security on
    options.ShowDoconutInfo = false;
});
// The page endpoint is not an option here: it is the DocImage.axd handler declared in Web.config.

Next steps

  • Quick Start — ドキュメントを開き、MVC 5 または Web Forms でブラウザにレンダリングします。
  • License Setup — Doconut がライセンス ファイルを探す場所を確認します。

このページは役に立ちましたか?