我试图让两个 uwp 应用程序(Windows 10 应用程序)在同一台计算机上运行时进行通信。应用程序已经可以进行通信当运行于不同的主机,因此代码正在运行(两个应用程序都可以在其清单文件中声明的本地和公共网络中进行通信)。
什么时候在同一主机上运行但是,那客户端应用程序无法连接到服务器。
我使用 Visual Studio 2015 Community Edition Update 3 进行开发。
在“项目设置”->“调试”->“允许本地网络环回”下选中。
我尝试通过命令行添加 LoopbackExempt(对于两个应用程序):
checknetisolation LoopbackExempt -d -n=<packagefamilyname>
但仍然不起作用。
我正在使用的代码(认为可能不相关)
服务器端代码:
var listener = new StreamSocketListener();
listener.ConnectionReceived += Listener_ConnectionReceived1;
await listener.BindServiceNameAsync("20000", SocketProtectionLevel.PlainSocket);
客户端代码:
StreamSocket socket = new StreamSocket();
_hostName = <hostname/ip>;
await socket.ConnectAsync(new HostName(_hostName), "20000",SocketProtectionLevel.PlainSocket);
环回豁免将允许应用程序作为客户端连接到本地系统,但不会让应用程序作为服务器接收本地连接。
参见MSDN上文章中的注释如何启用环回并排除网络隔离故障(Windows 运行时应用)
Note仅允许出于开发目的环回。由 a 使用
在 Visual Studio 外部安装的 Windows 运行时应用程序不是
允许的。此外,Windows 运行时应用程序只能使用 IP 环回
作为客户端网络请求的目标地址。所以一个Windows
运行时应用程序使用数据报套接字 or StreamSocket监听器到
侦听 IP 环回地址时会阻止接收任何
传入的数据包。
根据具体需求,还有其他几种选择。最有可能的两个是:
如果目标只是为了测试,那么在不同的系统上运行应用程序。
如果目标是 IPC,则实施应用服务。应用服务专为 UWP 到 UWP 通信而设计
如果您正在进行侧面加载(无论如何您都需要调用 checknetisolation),那么您还可以考虑添加代理 Windows 运行时组件或桌面应用程序作为两个客户端都可以连接到的代理服务器,但我肯定会首先检查应用程序服务选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)