毎日朝からタスクでIISの起動を行っているのだが、

今日はなぜかIISが立ち上がっておらず、朝から画面が起動しないということがあった。


とりあえず電話でお客さんにIISの起動コマンドを打ってもらったら

起動は正常に行われた。


現場でシステムログを調査したところ、


World Wide Web Publishing Service は次のエラーで終了しました 指定されたパスは現在使用できません。


とのエラーメッセージが。


そもそもWorld Wide Web Publishing Serviceが立ち上がってないと

IISも動かないみたい。

このサービス、手動でのWorld Wide Web Publishing Service の起動は

コンパネ → 管理ツール → サービスで可能。


もしくはIISRESET /STARTで同時に起動される。


ってことはサービスの起動が上手くいかなくても

IISRESETのコマンドを実行した時点で立ち上がるはず・・・?




現在の製造環境はサーバ1台にクライアント5台の
ワークグループ環境。


VISUAL BASIC 2008 EXPRESS EDITIONと
SQL SERVER 2008 WORKGROUP EDITIONを使用。


そこで、EXEファイルのテストとして、VBもはいってなければ
一度もサーバに接続した事の無いクライアントを使用して実行してみた。

サーバにあるログが開けませんでした。


VBで他のコンピューターにファイル出力を行う場合、
一度サーバにアクセスしてユーザーIDとパスワードを入れて
サーバーに入らないと弾かれる。


まさかユーザーに、アプリを使用する前にサーバのエクスプローラーを
開いてくださいなんて言えない。


んで、色々調べてたのですが、


ユーザー環境はドメイン環境。

要はログインするときに認証されるので、
特にそういう処理は必要無かった。




ちゃんちゃん



VISUAL BASIC 2008のプログラムでSQL SERVER 2008を使用。

プログラムの大まかな流れとしては、


1.テーブルのTRUNCATE(SQL実行)


2.TRUNCATEしたテーブルにデータをインポート(BCPコマンド使用)


3.ストアドプロシージャを実行して、データをインポートした
  テーブルを更新用データとして、他のテーブルのデータを更新する。


というシンプルな造りなのですが、これがいっくらやっても
更新結果ゼロ件となります。


しかしテーブルを見た限りではデータは入ってるしな・・・


ストアドを呼んでないのかとか考えましたが、
ログはしっかり出ているので、それも考えにくい。


VBも初めてだったので、書き方がおかしくないか色々調べまくりました。


結局調査で2日くらいかかりました。



で、結果わかったのが、

ストアドを実行する前にBCPコマンドが終了してないのでは?ということ。

ためしにBCPコマンド実行後、5秒くらい待つ関数を作って
実行させてみたらビンゴ。


しゃあないので、実行結果を監視する関数
(5秒おきにSELECT文を実行して、件数を取得。ゼロ件だったら
 再度5秒後にSELECT文実行、ゼロ件より大きければループを抜ける。
 ちなみに任意の時間を過ぎたらタイムアウトとしてメッセージ出力し
 処理を終了させる)


なんてのを作って対処しました。


よく考えたらBCPコマンドって外部でDOSで動くコマンドだから
コマンド発行したら、はいおしまい、ってことでVBは次の処理にいっちゃうんですよね。