DDNSクライアントサービスを作ってみる.

スキルチャージプログラムでいただいたサーバをDDNSに登録しようかと.
ただ,一般的に使われるDiCEというクライアントアプリケーションはWindowsサービスで起動できない.
サービスで動いてくれないとサーバが再起動したときに,ログインするまでDDNSの更新作業が動作しない.
#どうやら有料版のDiCEはサービス登録できるらしいのだが,


というわけで,今回はサービス登録できるDDNSクライアントを作ってみた.


最初,Windowsサービスを作る方法を調べていたのだけれど

WindowsサービスをC#で書く - backyard of 伊勢的新常識


まさに同じようなことを考えていた人がw
#この人もスキルチャージプログラムに登録していた気がする


これのTimerコントロールのイベントにDDNS更新を書いてやればいい.
今回はDynamicDoを利用したので,以下の方法で更新すればいい模様.

 定期的に自動で更新するには、 HTTPクライアントから下記URLを読み込んでください。
http://ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード
(無料サービスの場合は http://free.ddo.jp/......)


Dynamic DO!.jp - 使い方 -

そいで,具体的にはWebClientで上記での指定のアドレスを読み込めばいいんじゃないかと,ソースを書いてみる.

Private Sub Timer_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer.Elapsed
    Dim regkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\Verusoft\DynamicDoClient", False)
    If Not (regkey Is Nothing) Then
        Dim username As String = regkey.GetValue("username")
        Dim password As String = regkey.GetValue("password")
        Dim logfilepath As String = regkey.GetValue("logfilepath")
        Dim url As String = "http://free.ddo.jp/dnsupdate.php?"
        Dim wc As New Net.WebClient()

        Dim sw As New IO.StreamWriter(logfilepath, True)
        Dim html As IO.Stream = wc.OpenRead(url + "dn=" + username + "&pw=" + password)
        Dim sr As New IO.StreamReader(html, System.Text.Encoding.UTF8)

        sw.WriteLine("Send Query to DynamicDo!")
        sw.WriteLine(DateTime.Now.ToString)
        sw.WriteLine("username:" + username)
        sw.WriteLine("password:" + password)
        sw.WriteLine(sr.ReadToEnd)
        sw.WriteLine("================================================================================")
        sw.Close()
    End If
End Sub


レジストリからユーザー名とパスワードを読み込んで,Getしているだけなんだけど,十分動いてくれている.
これでようやく,外部から参照できるね!