EPoS 端末用の Windows アプリで Peer 2 Peer を WCF と共に使用する可能性を調査しています。
アプリは、ローカル ネットワーク内の複数の PC に配置されます。PC ごとにアプリのインスタンスが 1 つだけ存在します。
私の現在の考えでは、アプリが起動してピア メッシュに参加し、メッシュに参加すると、端末 ID と IPv6 アドレスを含む「ハートビート」メッセージを定期的に叫びます。
メッシュに参加する他の端末は、これらのハートビートを受信し、ネットワーク内の端末の独自のリストを維持します。
アプリ内のアクションには、ネットワーク上の特定の端末にアクセスする必要があります。したがって、アプリは端末 ID を IP アドレスに解決し、net.tcp 経由でサービスにアクセスするための Uri を生成できます。
リンク ローカル アドレスを使用してサービス エンドポイントを公開しました
printingHostRemote = New ServiceHost(printSpooler, New Uri("net.tcp://" & myNetworkAddress & "/" & ServiceNames.PrintingService))
printingHostRemote.AddServiceEndpoint(GetType(IPrintingService), tcpPipeBinding, "net.tcp://" & myNetworkAddress & "/" & ServiceNames.PrintingService)
エンドポイントをセットアップするための文字列は、たとえば次のようになります。
"net.tcp://[fe80::250:56ff:fec0:8%4]:5555/GSS-POS/PrintingService"
ただし、このサービスにアクセスしようとすると、ホストに到達できないというエラーが表示されます。
TCP エラー コード 10065: 到達不能なホストに対してソケット操作が試行されました fe80::290:5ff:fe01:6303%4:5555
これは、IPv6 アドレッシングに関する私の限られた知識によるものだと認識しています。エンドポイントにどのアドレスを使用すればよいですか (リンクローカル IPv6 アドレスを使用しています)? それとも、私の全体的なコンセプトに欠陥がありますか?
ティア、
サイモン