ASP.NET 5 が OWIN を互換レイヤーとしてサポートすることを決定したということで、OWIN is dead などという記事を書いたわけですが。率先して選ぶことは減ってきているのかもしれませんが、そうは言っても OWIN は (一応) 現役です。
OWIN の良いところのひとつにセルフホストがあります。ホスティング環境を抽象化し、System.Web.dll (= IIS 強依存) からの脱却に成功して注目されたアレです。先日 @masayan_kazu さんから SignalR についての相談を受け、セルフホスティングについて解説したのですが、「セルフホスティングで構築したサービスを別 PC から参照したい」という要望も後に受けました。今回はその時に知った方法を。
1. 公開 URL を指定する
セルフホスティングに関する記事を読んでいると、大抵の場合 http://localhost:8080
のような localhost 向けの URL が指定されています。ループバックを示す設定なので、このままでは自分自身からしかアクセスできません。何とか自分に付与されている IP アドレスでサービスを公開したいわけですが、それは以下のようにします。
[STAThread] static void Main() { using (WebApp.Start("http://+:8080")) { //--- 省略 } }
localhost
の設定を +
に書き換えるのがポイントです。
2. 管理者権限で実行する
URL は先の設定で OK なのですが、そのまま起動しようとすると TargetInvocationException が飛びます。これを回避するためにはアプリケーションを管理者権限で実行する必要があります。手っ取り早く app.manifest
に以下の設定を入れましょう。
<?xml version="1.0" encoding="utf-8"?> <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <!-- 実行時に管理者権限を要求 --> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> </assembly>
Visual Studio でデバッグ実行をする際は、Visual Studio 自体も管理者権限に昇格させる必要があるので注意が必要です。(先のマニフェストの設定を入れれば、デバッグ実行時に管理者権限への昇格を要求されます)
3. 通信ポートの解放
最後にファイアーウォールの受信/送信規則に通信用のポートを解放する設定を入れます。試したところ、ファイアーウォールの設定はサービス公開側でのみ行えば良さそうです。