Xamarin:连接到本地托管的Web服务

jay*_* kj 22 web-services xamarin.android xamarin

我想创建一个web api应用程序来连接xamarin和android.
我已经尝试了很多,但一些连接错误即将到来.

我的代码如下:

public async Task<JsonValue> find(int ID)
    {
     using (HttpClient client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:49836");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage result = client.GetAsync("api/Product").Result;
           return JsonConvert.DeserializeObject<JsonValue>(await result.Content.ReadAsStringAsync());                
     }       
    }
    }
Run Code Online (Sandbox Code Playgroud)

我收到如下错误

System.Net.WebException:错误:ConnectFailure(连接被拒绝)---> System.Net.Sockets.SocketException:连接被拒绝

任何人都可以帮忙.任何帮助表示赞赏.

Cul*_* Ch 31

这个答案可能会有点晚,但对于那些需要它的人:如果您使用的是Android Emulator,那么要求localhost Web服务将无法工作,因为您正在查看模拟器的localhost.你怎么解决这个问题?好吧,Android Emulator有一个神奇的地址http://10.0.2.2:your_port,它指向主机上的127.0.0.1:your_port.看看这里.因为它指的是IP而不是localhost,你需要进入你的项目解决方案,在.vs文件夹 - > config-> applicationhost.config中并将其更改<binding protocol="http" bindingInformation="*:13142:localhost" /><binding protocol="http" bindingInformation="*:13142:127.0.0.1" />,其中13142是我的端口,你的可能会有所不同.重新启动IIS Express,你很高兴.

  • 经过数小时的搜索救了我。 (4认同)
  • 工作起来就像一个魅力!谢谢 。经过很长时间的寻找富有成效的答案 (2认同)

Ehs*_*edi 26

请注意,如果您的Web服务由IIS Express托管,那么您应该知道无法从外部设备连接到IIS Express,因为IIS Express本身只响应本地计算机的请求.所以从android模拟器作为外部(虚拟)设备,我们无法向IIS Express发送请求.解决方案是使用IIS而不是IIS Express.

  1. 使用IIS或配置IIS Express以服务于外部请求.
  2. 在Android模拟器中你不能使用'localhost',因为'localhost'是loopback并且是指Android模拟器.相反,您必须使用IIS的IP来解决您的Web服务.
  3. 配置系统的防火墙,以允许http请求进入.

  • @Ehsad Mirsaeedi我希望你能够更完整地回答如何完成这些事情,以便每个人都可以使用它. (8认同)

Maj*_*jkl 2

我解决了如何通过 asp.net web api 从服务器下载数据的问题,首先我推荐简单的方法。

尝试使用完整地址,例如。

检查您是否已打开数据连接。

确保您有正确的路径(例如,当您打开 wifi 时,它会通过您的 WebAPI 所在的服务器,因此不是完整的地址,而是本地服务器的地址)。

这是在我的情况下运行的简单代码(从简单开始,然后继续)

  using (WebClient webClient = new WebClient())
            {
                webClient.Encoding = System.Text.Encoding.UTF8;
                string result = webClient.DownloadString(new Uri("https://webapi.domain.cz/api/root"));              
            }
Run Code Online (Sandbox Code Playgroud)