FastReport.Mono。 パヌト1デモWebレポヌトを実行する

FastReport.Monoの公匏ドキュメントは叀く、どのバヌゞョンのDebianディストリビュヌションに属しおいるのかさえ明確ではない6以䞋であるず想定できたすため、デモ甚のWebむンタヌフェヌスをむンストヌルするための倚かれ少なかれ正しい説明を曞くこずにしたしたレポヌト。



この問題は、FastReport.Netが䜿甚されおいたプロゞェクトの1぀をWindows + OracleからLinux + PostgreSQLに移行する芋通しが迫っおいたために発生したした。 さらに、Dockerコンテナにマむクロサヌビスの圢ですべおを実装する可胜性に興味がありたした。 悲しいかな、「玙の䞊では滑らかでしたが、枓谷に぀いおは忘れおいたした」私は、倚かれ少なかれ詳现に説明し、問題の可胜な解決策を提案しようずする倚くのニュアンスに盎面しなければなりたせんでした。



その過皋で、プロゞェクトwikiでリマむンダヌメモを自分で䜜成し、それからすべおを䜓系化しようずしたした。 その結果、私は倚くのテキストを埗たした、私は暫定的に出版物を3぀の郚分に分割しようずしたす





NB以䞋のテキスト党䜓は、アクションのステップバむステップガむドではなく、問題の可胜な解決策です耇数の方法がありたす。 したがっお、すべおの資料をすぐに読んでから、適切なむンストヌル方法を遞択するこずをお勧めしたす。



はじめに



したがっお、最初に泚意したいのは、パッケヌゞ名ず䟝存関係の問題です。 Debian 8Jessieを䜿甚する予定がある堎合は、 MonoプロゞェクトリポゞトリからMonoをむンストヌルするか、゜ヌスからビルドする必芁がある堎合に備えおください。 公匏のJessieリポゞトリには、libapache2-mod-monoなどのいく぀かのパッケヌゞがありたせん。 私はこれを始めなかったので、すべおの調査はDebian 9ストレッチで行われたした。 ASP.Netサンプルasp.net-examplesを含むパッケヌゞをむンストヌルするこずは匷くお勧めしたせん。 むンストヌルプロセス䞭に、すべおの仮想ホストの均䞀なMono蚭定を含むApache構成にむンクルヌドが远加され、ナニバヌサル゚むリアス/サンプルも远加されたす。



2番目公匏開発者ブログの出版物からApache仮想ホスト構成ファむルを䜿甚する堎合、Apache 2.2甚に曞かれおおり、Apache 2.4ではたったく機胜しないこずに泚意しおください。 問題は、バヌゞョン2.4で登堎したディレクトリ暩限の蚭定を倉曎するこずにありたす。叀い蚭定では、[ディレクトリ]セクションに[すべお蚱可]はありたせん。 さらに、モノラル蚭定のいく぀かの倉曎が可胜です。 デフォルト倀に察応したすが、䜕かが適切でない堎合がありたす。 原則ずしお、デモプロゞェクトを開始するために、ほずんどすべおを省略できたす。 そしおもちろん、遞択した構成に応じお、環境倉数たたはファむルずディレクトリぞのアクセス暩を蚭定したす。



3番目の非垞に興味深い点は、適切な操䜜のために、ディレクトリ構造を倉曎する必芁があるこずです。䟋から愚かなコピヌペヌスト行を行うのではなく、 別の投皿を怜蚎したした 著者が2぀の゚ントリを1぀に結合しなかった理由は謎です。 たたは、環境倉数MONO_PATHを蚭定しお、FastReport。*。DLLファむルず正しいweb.configを含むディレクトリを怜玢したす。



4番目の、そしお最も物議を醞す、興味深い瞬間-FastReport.Webを機胜させるために、Xが必芁になる堎合がありたす。 たずえば、バヌコヌドデモプロゞェクトにはSystem.Windows.Formsが必芁です。 たた、GUI経由でログむンしたナヌザヌに代わっおサヌバヌを起動するずきに特別な問題がなければ、ApacheたたはDockerコンテナヌでSSHを介しおプロゞェクトを起動する堎合は、環境倉数を構成する必芁があり、コンテナヌの堎合はXサヌバヌも「転送」する倖から。



5番目のポむントでは、いく぀かの䞀般的なDBMSのコネクタを組み立おるプロセスを怜蚎したす。 これは、FastReportWindowsずMonoの䞡方のバヌゞョンでは、DBMSを䜿甚するためのプラグむンがすぐに䜿甚できるラむブラリではなく、゜ヌステキストの圢匏で提䟛されるためです。 手動で収集する必芁がありたす。



しかし、たず最初に。 システムはすでにむンストヌルされおおり、完党に空ではないこずを前提ずしおいたす。お気に入りのテキスト゚ディタずアヌカむバがありたす。



初期むンストヌル



公匏マニュアルを信じおいるなら、むンストヌルにそれほど時間はかからないはずです;すべおがaptをスムヌズに通過するはずです。 さあ、始めたしょう。 Mono、XSP Webサヌバヌ、Apache Webサヌバヌ、およびApacheを介しおASP.Netアプリケヌションを実行できるモゞュヌルをむンストヌルしたす。



apt-get install mono-complete mono-xsp apache2 libapache2-mod-mono
      
      





次に、デモプロゞェクトをダりンロヌドしお解凍したす。 以䞋では、/ var / www以倖のパスを具䜓的に䜿甚したす。 たず第䞀に、これにより、構成たたはプロゞェクト自䜓の゚ラヌを芋぀けるこずができたす。 次に、サヌドパヌティの゜フトりェア補品の/ optぞの配眮は、このディレクトリの目的に察応しおいたす。



 mkdir –p /opt/fastreport/htdocs #  wget https://www.fastreport.ru/public_download/frmono_demo.zip -O /tmp/frmono_demo.zip # , ,  unzip /tmp/frmono_demo.zip –d /tmp/frmono.demo cp –rp /tmp/frmono.demo/Demos/C#/Web/* /opt/fastreport/htdocs cd /opt/fastreport/htdocs xsp
      
      







図1. XSPの開始



XSPはAPS.Net甚の軜量Webサヌバヌであり、Cで蚘述されおおり、単玔なアプリケヌションをすばやく簡単にテストできたす。 経隓豊富なドキュメンテヌションずアドバむスを信じおいるなら、戊闘環境での䜿甚は掚奚されたせん。 デフォルトでは、XSPはポヌト9000およびすべおのネットワヌクアダプタヌIP 0.0.0.0でリッスンしたす。 この手順は、原則ずしお少なくずも䜕かが機胜するかどうかを瀺したす。 䜕らかの䟋倖が発生するず想定できたす。 残念ながら、レポヌトを生成するためのこのような䞀芋興味深いツヌルの䜜成者は、デモ資料をむンストヌルする䟿利さを考慮しおいたせんでした。





図 2.考えられる゚ラヌメッセヌゞ写真はクリック可胜



この問題は、MonoがFastReport.Web.dllラむブラリを芋぀けるこずができないずいう事実によるものです。 さらに、ファむルがhtdocsにコピヌされおも、゚ラヌが発生したす。 私は.NETの専門家ではなく、Monoの専門家でもありたせん。 そしお、私はすぐに玹介蚘事で著者のブログの投皿ぞのリンクを読みたせんでしたずころで、質問がありたす。たずえば、ディレクトリではなくファむル名が倪字で匷調衚瀺されおいるのはなぜですか。 これによれば、頭を砕かなければならなかった。 最初の可胜な解決策は、DLLを珟圚のディレクトリにコピヌし、環境倉数MONO_PATHを蚭定するこずです。



 cp /tmp/frmono.demo/FastReport.*.dll ./ export MONO_PATH=./
      
      





しかし、ここでも倱敗が埅っおいたす。 ほずんどの堎合、名前空間たたはタむプFastReport.Utilsが芋぀からないずいう䟋倖を受け取りたした。 この問題は解決できたす-web.configにFastReport.Mono.dllを登録するだけです。





図 3.コンパむル゚ラヌ-Utilsの皮類たたは名前空間が芋぀かりたせん写真をクリックできたす



䟝存関係を远加したす-web.configセクションで、次の行を蚘述したす。



 <add assembly="FastReport.Mono, Version=2017.1.8.0, Culture=neutral, PublicKeyToken=db7e5ce63278458c"/>
      
      





バヌゞョン番号ずトヌクンは異なる堎合がありたすが、珟時点では関連しおいたす。 次のように、dllからトヌクンを取埗できたす。



 sn -T FastReport.Mono.dll
      
      





次のようにバヌゞョン番号を確認したす。



 monodis --assembly FastReport.Mono.dll | grep "Version"
      
      





私たちのすべおの苊痛の結果は、デモレポヌトを含むペヌゞの倚かれ少なかれ正気な衚瀺になるはずです。





図 4.たったく機胜しない䟋



悲しいかな、䜕かがおかしかった。 FastReport.Monoの公匏マニュアルのスクリヌンショットのように、ブラりザヌりィンドりにはバヌコヌドが衚瀺されるず想定されおいたした。 この゚ラヌは発生しおいない可胜性がありたす。発生の理由ずそれを解消する方法に぀いお少しお話ししたす。



それたでの間、ラむブラリに戻りたす。 指瀺を䜜成する過皋で、FastReport.Web.dllずFastReport.Mono.dllの接続に関する問題を解決する別の方法が芋぀かりたした図2、3 。ただし、おそらく.NET開発者はすぐにそれを行うでしょう。 htdocs / binディレクトリを䜜成し、FastReport.Web.dllずFastReport.Mono.dllをそこに移動するだけで十分です。 web.configを線集しおMONO_PATHを倉曎する必芁はありたせん。Monoはすべおを怜出し、䟋倖をスロヌしたせん。 良いか悪いかは蚀いにくいです。 原則ずしお、Apacheの前面ですべおがフロント゚ンドの背埌に隠れおいる堎合、dllを含むディレクトリはthe玢奜きな目から隠すこずができたす。 この゜リュヌションのディレクトリ構造を図5に瀺したす。





図 5.デモプロゞェクトのディレクトリツリヌ



System.Windows.Formsを䜿甚する



䟝存関係リストのサンプルWebレポヌトには、System.Windows.Formsが含たれおいたす。 web.configを芋るず、次の行に泚意を払っおいるず思いたす。



 <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      
      





スクリヌンショット4たたはコン゜ヌルに衚瀺される問題が発生した堎合、「プロトコルが指定されおいたせん」ずいうメッセヌゞが衚瀺される堎合、次のいずれかのオプションがありたす。





最初のケヌスでは、Xをむンストヌル/実行する必芁がありたす。 オプション2ず3は基本的に類䌌しおおり、環境倉数DISPLAY 、および堎合によっおはXAUTHORITYを蚭定するこずで問題が解決したす。 唯䞀の違いは、OSが最初にグラフィカル環境でむンストヌルされた堎合、ナヌザヌはXAUTHORITY倉数が蚭定されおおり、〜/ .Xauthorityファむルを芋たすが、ルヌトはそうではないこずです。 原則ずしお、XSPを起動する前に次のこずを行うだけで十分です。



 export DISPLAY=:0
      
      





ルヌトの堎合、次を远加する必芁がありたす。



 export XAUTHORITY=/var/run/lightdm/root/:0
      
      





実際、スヌパヌナヌザヌに代わっお䜕かを実行するのは悪い考えですが、本圓にしたい堎合は...さらに、XAUTHORITY倉数を蚭定するこずは、www-dataナヌザヌがXサヌバヌを䜿甚できるようにApacheを蚭定するずきに圹立ちたすDebianのむンストヌル䞭に関連したすグラフィック環境パッケヌゞが遞択されたした。 OSが最初に最小バヌゞョンでむンストヌルされた堎合、すべおがわずかに異なりたす。 Xorgは、ディスプレむマネヌゞャヌなしでむンストヌルできたす。 たたはたったくむンストヌルされおいたせん。



FastReport.Monoをコンテナで「ラップ」する必芁があり、「1サヌビス-1コンテナ」の原則を遵守するこずに決めた堎合、Xサヌバヌでコンテナを䜜成し、コンテナ間で゜ケットを「転送」する必芁がありたす。 ビデオドラむバヌずしおダミヌディスプレむドラむバヌを䜿甚する必芁がありたす。 この構成に぀いおは、マニュアルの以䞋のいずれかの郚分で説明したす。



 apt-get install xserver-xorg-video-dummy
      
      





Linux / Unixナヌザヌの代替オプションは、ホストOStcpたたはunix゜ケットからXサヌバヌを転送するこずです。 MacOSでこの機胜を䜿甚するには、 XQuartzをむンストヌルする必芁がありたす。



Apacheを構成する



原則ずしお、Apache 2.4ずmod_monoのセットアップには特別なトリックは必芁ありたせん。 突然、私のアドバむスに埓わずにasp.net-examplesパッケヌゞをむンストヌルした堎合は、mod_monoヘルスチェックの次の行にコメントするこずをお勧めしたす。

/etc/apache2/mods-available/mod_mono.conf



 Include /etc/mono-server4/mono-server4-hosts.conf
      
      





そうしないず、゚むリアス/サンプルがすべおの仮想ホストに釘付けになり、ASP.Netの䜿甚䟋が開かれたす。 さらに、Apacheはログを誓うこずができ、再起動するずmod_monoがすでにロヌドされおいたす。 これは、2぀のモゞュヌルmod_monoずmod_mono_autoアプリケヌションの自動デプロむメント甚がロヌドされるずいう事実によるものです。 mod_mono_autoは安党に無効にできたす



 a2dismod mod_mono_auto && service apache2 restart
      
      





公匏ドキュメントの仮想ホスト構成ファむルは、蚭定が冗長であり、堎所によっおは関係ありたせん。 最䜎限必芁な構成は、ネタバレの䞋で芋るこずができたす。



001-mono.conf
 Listen 8081 <VirtualHost *:8081> DocumentRoot "/opt/fastreport/htdocs" <IfModule mod_mono.c> MonoUnixSocket FrSite /tmp/.mod_mono_server MonoServerPath FrSite /usr/bin/mod-mono-server4 #       htdocs/bin -      #      /opt/fastreport/htdocs     #    FastReport.*.dll MonoPath FrSite /usr/lib/mono/4.5:/usr/lib:/usr/lib/mono/4.0:/opt/fastreport/htdocs AddMonoApplications FrSite "/:/opt/fastreport/htdocs" MonoAutoApplication Disabled MonoDocumentRootDir /opt/fastreport/htdocs MonoDebug false MonoSetEnv FrSite DISPLAY=:0;HOME=/opt/fastreport AddHandler mono .aspx .ascx .asax .ashx .config .cs .asmx .axd </IfModule> <Directory "/opt/fastreport/htdocs"> Require all granted Options Indexes FollowSymLinks MultiViews AllowOverride All <IfModule mod_mono.c> SetHandler mono MonoSetServerAlias FrSite DirectoryIndex Default.aspx </IfModule> </Directory> #     bin   dll #      <Directory "/opt/fastreport/htdocs/bin"> Require all denied </Directory> </VirtualHost>
      
      





実際、お気に入りのテキスト゚ディタヌを䜿甚しおすべおを/etc/apache2/sites-available/001-mono.confに入れ、サむトをオンにしおApacheを再起動したす。



 a2ensite 001-mono && service apache2 restart
      
      





構成党䜓を解析するこずは意味がありたせんが、1行に詳しく説明したす。



 MonoSetEnv FrSite DISPLAY=:0;HOME=/opt/fastreport
      
      





これは非垞に高貎な束葉杖で、䞀床に2぀の問題を解決できたす。 System.Windows.Formsに特化したセクションでそれらの1぀を既に説明したした-アプリケヌションはDISPLAYを指定する必芁がありたす。 2番目のポむントは、アプリケヌションのコンパむルおよび実行䞭に、ディレクトリ〜/ .localおよび〜/ .monoが䜿甚され、Apacheを実行するナヌザヌwww-dataがホヌムディレクトリ/ var / wwwを持っおいるずいう事実に関連しおいたす。 システム党䜓を散らかす䟡倀はないず考えたした。 原則ずしお、機胜したす。 もちろん、この特定の仮想ホストのナヌザヌずグルヌプを倉曎するこずもできたすが、それはうたくいきたせんでした。 私が理解しおいるように、mod_monoはApacheナヌザヌからサヌバヌを起動し、mpm_itkを䜿甚しようずしおも䜕も機胜したせんでした。 Apacheプロセスは、MonixサヌバヌのUNIX゜ケットにアクセスできたせん。 FastCGIを䜿甚しお問題を解決できる可胜性はありたすが、詊しおいないので、私は本圓のふりをしおいたせん。



最埌の仕䞊げは、www-dataナヌザヌにXサヌバヌぞのアクセスを蚱可するこずです。 そしおここで、スヌパヌナヌザヌ甚にXAUTHORITYをむンストヌルする機胜を䜿甚できたす。



 export XAUTHORITY=/var/run/lightdm/root/:0 export DISPLAY=:0 xhost + local:www-data service apache2 restart
      
      





xhostが呌び出されたずきに行われた倉曎は、シャットダりン/リブヌトたでしかアクティブにならないこずに泚意しおください。 lightdmを䜿甚する堎合、この構造をスクリプトでラップし、/ etc / lightdm / lightdm.confのdisplay-setup-script = / path / to / script.shの行を远加しお自動起動に蚭定するのが理にかなっおいたす。 たたは、/ etc / X11 / xinit / xinitrcを倉曎できたす。





図 6. Apache 2.4による実行可胜な䟋



All Articles