かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Windows ストア アプリでlocalhostに繋がらない?

Visual Studioとかから実行すろと、自動的にlocalhostへループバックできるような設定が裏で追加されるんですね…知らなかった。ということで、業務アプリとかでデスクトップ側の世界と何かやりとりしたいという要望に応えるためにデスクトップ側にWebサーバー立てて、ストアアプリからlocalhostに対してWeb API呼んだりSignalRでリアルタイム通信だぜ・・・!とか目論んでた場合は、そのままでは死亡です。

試しに以下のコマンドをうってみると、ずらずらずら~~~っと表示されるはずです。

# ループバックを許可するということを許された人のリスト
CheckNetIsolation.exe LoopbackExempt -s

localhostへ通信出来てたと思ってたアプリにとどめを刺すというか、他の人のマシンにサイドローディングしたのと同じ状況を再現するには、以下のコマンドをうってざっくりと除外設定を削除します。

# ループバックを許可するということを許された人を削除
CheckNetIsolation.exe LoopbackExempt -c

こうすると、晴れてストアアプリからlocalhostへの接続ができなくなります。

じゃぁどうしよう?という話になるのですが、CheckNetIsolation.exeでループバックを許可するやつをコマンドで明示的に許してやる必要があります。ストアアプリのPackage.appxmanifestのパッケージ化の所にあるパッケージファミリ名を使うのが一番お手軽そうです。

# パッケージファミリ名を指定してループバックを許可するように指定
CheckNetIsolation.exe LoopbackExempt -a -n=パッケージファミリ名

こうしてやると、無事そのアプリでlocalhostにつながるようになります。めでたしめでたし…。サイドローディングでインストールするときに、このコマンドも一緒に叩くようにしておかないといけないくさいな…。めんどくさそう。

さいごに

もっといい方法募集中。