Web サービスの例外により DLL がロックされ、公開が妨げられます。回避策?
-
09-06-2019 - |
質問
C# ASP.NET Web サービスでネイティブ DLL (FastImage.dll) を使用していますが、時々ロックされます (削除できません -- アクセスが拒否されました)。これには、IIS を停止して DLL を削除する必要があります。公開した Web サービスの bin フォルダーにあるこの DLL を削除できないため、(正常に公開されたと思っていても) 正常に公開できなくなり、開発とバグの修正が困難になります (特に、古いコードが問題なく実行される場合)変更はサーバーに反映されない可能性があります!)。Web サービスが DLL を爆破してロックアップする原因となるバグは、DLL の外部にある私のコードにあることに注意してください。そのため、これは単なる FreeImage ライブラリの問題よりも一般的な問題だと思います (問題を引き起こさないようにするため)。
- これを経験した人はいますか?
- VS IDEから「発行に成功しました」と表示されたときに、それが本当にそれを意味していることを確認する方法はありますか、または発行を試行する前にファイルが本当に削除されていることを確認するスクリプトのようなものを実行する方法はありますか(プレビルドなど) VC++ のステップ)。(現在、古い DLL を実行するのではなく、DLL が置き換えられたことを確認するために、公開する前にファイルを手動で削除しています。ただし、DLL を削除できない場合は問題が発生します。)
- ファイルがバッチ ファイルから正常に削除されたかどうかを検出するにはどうすればよいですか?(IIS が失敗した場合に停止して起動できるようにするため)
- スクリプトから (できれば発行... から) IIS を停止および起動することは可能ですか?VS IDE のアクション)、そうする場合はどのようにして行うのでしょうか?
解決
IISReset コマンド ライン ツールを使用すると、発行先のリモート サーバーではなく、ローカル マシン上の IIS のみが再起動されます。
Windows 2003 サーバーに公開していると仮定すると、Web サービスが実行されている Web サイトまたは仮想フォルダーで IIS AppPool を停止して再起動するという、少し大胆ではない手順を試してみることをお勧めします。(そうすれば、ターゲット サーバー上で実行されるすべてのサイトがオフラインになることはありません。)これも、Web サービスが独自のアプリ プールで実行されることを前提としています。理想的には、隔離したままにしておく必要があります。
公開プロセスの使用をやめ、Web 配置プロジェクトの使用を検討することをお勧めします。詳細については、ScottGu のブログの投稿をご覧ください。 VS 2005 Web 導入プロジェクト.
Web 配置プロジェクトのアプローチの利点は、実際には MSBuild の便利なラッパーにすぎないため、MSbuild のすべてのパワーと機能が提供されることです。MSBuild チームからの投稿は次のとおりです。 ビルド前およびビルド後の機能
お役に立てれば。
他のヒント
IISReset コマンド ライン ツールを使用して、iis を停止/再起動できます。したがって、iis を停止し、ファイルをコピーして、iis を再起動するための単純なバッチ ファイルを作成できます。ただし、これを VS パブリッシュ機能と統合する方法はわかりません。