如何从Xamarin应用程序访问在localhost上运行的Web服务?

时间:2019-07-08 21:17:23

标签: c# http xamarin httpwebrequest webrequest

如果我像在WinForms应用程序中那样进行操作(是的,我知道这不是一种安全的密码发送方式,我将在以后进行修复):

 var req = WebRequest.CreateHttp($"http://localhost:58112/api/login?systemID=1091&login={login}&password={password}");
 var resp = (HttpWebResponse)req.GetResponse();

我收到超时错误,大概是因为“ localhost”是指我在其上运行Xamarin的Android虚拟机。那么,如何从Android应用中引用实际的本地计算机呢?我当时在想PC的主机名,但是这取决于谁在运行代码,因此需要在登录页面上作为另一个输入字段...

1 个答案:

答案 0 :(得分:1)

您已经发现,localhost / 127.0.0.1表示“此主机”,仅用于与应用程序所在的同一主机进行通信。如果您想通过单独的Android设备与另一台本地计算机对话,这将无济于事。

如果我对您的理解正确,那么您正在尝试向本地网络上的其他服务器发出HTTP Get请求。我不确定在本地发现服务的“神奇方法”,尽管多年来开发了许多协议来尝试克服这一问题,包括许多基于DNS,UDP,多播,Bonjour和以前发现的SOAP服务等。

存在许多在本地发现服务的最佳方法周围的线程(包括专门从Android中发现),这可能会帮助您...

https://softwareengineering.stackexchange.com/questions/244728/best-strategy-to-discover-a-web-service-in-a-local-network

Device discovery in local network

我没有使用过它们,但是通过搜索找到了它们(简单服务发现协议,ZeroConf)...

https://github.com/Yortw/RSSDP

https://github.com/onovotny/Zeroconf

最简单的方法可能是允许用户在运行时提供提示。例如,在首次运行时在简单对话框中或在设置/首选项/配置文件等中要求服务器的IP。我经常将其用于应用程序是为了加快开发速度,以便稍后引入自动发现。课程的YMMV。

HTH

ps。请让我对其他StackOverflow'ers放心,这是我的第一个回复:-)