かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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

さいごに

もっといい方法募集中。