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

时间:2015-06-30 07:02:23

标签: web-services xamarin xamarin.android

我想创建一个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());                
     }       
    }
    }

我收到的错误如下所示

  

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

任何人都可以提供帮助。任何帮助表示赞赏。

6 个答案:

答案 0 :(得分:25)

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

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

答案 1 :(得分:18)

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

答案 2 :(得分: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"));              
            }

答案 3 :(得分:1)

i solved this problem by using IP address not use localhost

答案 4 :(得分:0)

尝试更改Hosts文件,将新主机名添加到127.0.0.1

127.0.0.1  mylocalmachine #this name can be any you want

现在您可以使用此网址

client.BaseAddress = new Uri("http://mylocalmachine:49836"); 

这是因为localhost位于模拟器的上下文中,因此调用手机的localhost。

而不是使用主机名,你可以做Culy Ch的目标。

答案 5 :(得分:0)

如果您的Web服务由IIS托管,则您需要进行一些额外的设置才能接受来自外部设备或服务器的请求。 (iOS模拟器,另一台开发人员计算机上的单独项目等)

为此,请遵循此堆栈溢出答案中的建议: How to enable external request in IIS Express?