2012年11月6日火曜日

Skype4COM+ASP.NET+IIS6.0でSMS送信の際のIIS設定

今開発しているスマホサイトでSMS認証を追加することになりました。
色々サービスを検討しましたが、スカイプが月額料なしで1通8円前後ぐらいと
そこそこリーズナブルなので、スカイプを使うことにしました。

スカイプは「Skype4COM」というCOMコンポーネントを使うことで
スカイプクライアントをプログラムから使うことができます。
これをASP.NET(VB.NET)から使いますが、簡単にできてしまいますので
コードなどは割愛。
スカイプのデベロッパーサイトなどを参照してください。
COMのDLL自体は通常のスカイプクライアントをインストールすると
同時にインストール・登録されるようです。

ローカルでVisutalStudioの開発用WEBサーバでテストしていたときは何の問題も
なく、WebからSMSが送信できていました。
しかし、いざサーバのIISでやってみるとどうもうまくいかない。
タスクマネージャーを確認してみると、ログオンしているデスクトップ上の
クライアントとは別プロセスでスカイプが立ち上がってしまうようです。
ということで、いろいろやって解決した設定メモ。

各動作・実行・開発環境は以下です。

Windows 2003 Server sp2 (IIS 6.0)
.NET Framework 2.0
スカイプバージョン6
VisualStudio 2010

ローカルの開発Webだと問題なくSMS送信できていることが前提です。
以下の手順でスカイプからブラウザ経由でSMS送信できるようになりました。
なお、アカウントのユーザ権利をいじったりしますので、思わぬセキュリティの穴を
作ってしまうことも考えられます。
設定はよく検討してください。


1.サーバーのローカルでログオン
 僕の場合、Administratorでログオンしています。
 これ結構重要で、 リモートデスクトップでのログオンではダメです。
 必ずローカルでログオンします。

2.スカイプのインストール、ログイン(普通に)

3.IIS Admin Serviceのログオンタブで、デスクトップとの対話をサービスに許可をチェック
 world wide web~サービスもチェックしたほうがいいかも?
 いろいろやっててこれもチェック入ってますが、動かなければチェックで。

Clipboard01.gif

4.ワーカープロセスの識別IDで選択されているアカウントにローカルログオンを許可する権利を割り当て
 これにたどり着くのに2,3日かかりました。。
 通常はNETWORK SERVICEアカウントになってますが、ローカルセキュリティポリシーでこれに
 ローカルログオンを許可するの権利を割り当てます。

Clipboard02.gif

5.開発したASP.NETファイルをIISにコピー・設定など

6.ブラウザからテストします

これで、ローカルで実行しているスカイプクライアント経由でSMS送信されます。
僕はSMS送信しましたが、他の操作もできると思います。

難点は、サーバーの再起動などした場合、必ずローカルログオンしてないとスカイプから
送信できないということですね。
スカイプクライアントが実行されてない場合は実行するようにコードは書いてみたのですが、
バックグラウンドで実行されてしまうと上手くスカイプは動かないようです。
自動ログインとかがうまくいかないのかも?

あと、初めてCOMを使う場合、スカイプクライアントが連携を許可するか聞いてきます。
これを許可しておかないと実行されません。
これはインストール後、初回の実行時のみで以降は大丈夫です。

スカイプ側の仕様変更などで今後変更があるかもしれませんが、現状では
これで動いています。

IIS7以降だとどうなるかは今のところテストしてないです。
現状使ってるサーバが古いのですね。。
Hyper-Vがあるのでおそらくこのままこれを使い続けそうです。。

お役に立てれば幸いです。