ヘッダーイメージ 本文へジャンプ
日記
2016年01月26日 15時52分
XSP をサービスで動かす
mono の アプリケーションサーバー XSP が動いたのですが
サービスで動かしたいので、強引に、サービスで動かすように

起動用のサービスを VB で作ってみました

ただ、モジュールの入れ替えとかしたときに、IIS や mod_aspdotnet なら
勝手にセッション切ってリロードしてくれるのですが
XSP は落ちちゃうみたいで、サービスは動いてるけど、XSP は落ちてる・・・
みたいなことになるので、生きてるかチェックするようにしてみました

作ったのは VS2012 ですが、凝ったことしてないので、2005 とかでも大丈夫じゃないかと思います

Public Class XSP_SERVICE
    Private mProc As System.Diagnostics.Process

    Dim mTimerDelegate As System.Threading.TimerCallback
    Dim mTimer As System.Threading.Timer

    Protected Overrides Sub OnStart(ByVal args() As String)
        ' サービスを開始するコードをここに追加します。このメソッドによって、
        ' サービスが正しく実行されるようになります

        Dim procInfo As New System.Diagnostics.ProcessStartInfo()
        procInfo.WorkingDirectory = 「カレントディレクトリ」
        procInfo.FileName = 「XSP.exe のフルパス」
        procInfo.Arguments = 「パラメータ」
        procInfo.CreateNoWindow = True
        procInfo.UseShellExecute = False
        procInfo.ErrorDialog = True
        procInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized
        mProc = System.Diagnostics.Process.Start(procInfo)

        'タイマーを作る
        mTimerDelegate = New System.Threading.TimerCallback(AddressOf timer_tick)
        mTimer = New System.Threading.Timer(mTimerDelegate, Nothing, 0, 1000)

    End Sub

    Protected Overrides Sub OnStop()
        ' サービスを停止するのに必要な終了処理を実行するコードをここに追加します。
        Try
            mProc.Kill()
            mProc.Close()
        Catch ex As Exception

        End Try
    End Sub

    Private Sub timer_tick(o As Object)

        If (mProc.HasExited) Then

            Dim procInfo As New System.Diagnostics.ProcessStartInfo()
            procInfo.WorkingDirectory = 「カレントディレクトリ」
            procInfo.FileName = 「XSP.exe のフルパス」
            procInfo.Arguments = 「パラメータ」
            procInfo.CreateNoWindow = True
            procInfo.UseShellExecute = False
            procInfo.ErrorDialog = True
            procInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized
            mProc = System.Diagnostics.Process.Start(procInfo)

        End If
    End Sub

End Class

これを、サービスに登録します

sc create 「サービス名」 binPath= 「上記をビルドしたexeのフルパス
sc config 「サービス名」 start= auto
※パラメータの 「= 」の後ろに、必ず1スペースが必要

もっと、ログ出すとか、パスとかパラメータファイル用意する方がいいですけど
とりあえず、こんな感じで動いてます


たぶん・・・・



・Windows上のApcheでASP.NETを動かす
・Windwos で mono
・XSP が遅い
・XSP をサービスで動かす
・Apache でエラーが出る
・Apache XSP にリバースプロキシかけると遅い?
・XSP で image のローディングに失敗する
・iOS 上の Safari でビープ音を鳴らす

カテゴリー:日記
目次へ戻る


フッターイメージ