かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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につながるようになります。めでたしめでたし…。サイドローディングでインストールするときに、このコマンドも一緒に叩くようにしておかないといけないくさいな…。めんどくさそう。

さいごに

もっといい方法募集中。