【问题标题】:Connection to local web service from xamarin Vs2015 android emulator从 xamarin Vs2015 android 模拟器连接到本地 Web 服务
【发布时间】:2016-11-10 01:30:53
【问题描述】:

尝试从 android 模拟器连接到本地主机上的 Web 服务时,我收到“连接被拒绝”或“错误请求”。我已将端口号添加到防火墙以允许连接,并且我尝试了here 给出的建议来修改 applicationhost.config

Web 服务和模拟器都在同一台 (Windows 10) 电脑上运行。在服务器的 web.config 中,我在“system.webserver”下有以下内容:

 <httpProtocol>
 <customHeaders>
  <clear />
  <add name="Access-Control-Allow-Origin" value="*" />
   <add name="Access-Control-Allow-Headers" value="Content-Type" />
   <add name="Access-Control-Allow-Methods" value="GET, PUT, POST" />
 </customHeaders>
 </httpProtocol>

AFAIK 模拟器可以找到网络服务器(我没有收到“未找到”错误),但服务器拒绝连接。

   using (WebClient client = new WebClient())
   {
     string json = ......;
     client.Headers[HttpRequestHeader.ContentType] = "application/json";
    //      I have also tried  "application/x-www-form-urlencoded";
    string result = client.UploadString(UrlBase.urlBase + "SaveLocation", json);

如果“UrlBase”是http://192.168.1.73:60080/Service1.svc/,我会收到“错误请求”,我知道这可能是由于 json 格式错误造成的。

如果 'UrlBase' 是远程服务器,则连接有效(所以我知道 json 格式是正确的)。在远程和本地服务器上运行相同的更新 dll。

如果 'UrlBase' 是 http://localhost:60080/Service1.svc/,我会收到异常 'connection denied'

【问题讨论】:

  • 请显示使用的代码和使用的地址。
  • 还有什么不清楚:模拟器是否与您的网络服务在同一台电脑上运行?如果您有三台电脑/笔记本电脑,那么它们都是它们自己的本地主机。所以如果你谈论 localhost 那么我们怎么知道你的意思呢?
  • 模拟器是它自己的虚拟机,有自己的IP,所以localhost指的是模拟器。如果要连接到运行模拟器的 PC,请使用它的 IP 或 FQDN。
  • 谢谢,更多信息现已添加到原始帖子中。我知道模拟器的 IP,但是如何告诉服务器接受来自它的连接?

标签: android xamarin


【解决方案1】:

我没有使用任何防火墙规则,因为我的模拟器与服务主机位于同一台机器上。正如 Jason 所说,您应该使用您的主机 IP 地址。 为了避免许多问题,请使用本地 IIS 主机而不是 IIS express。您的“错误请求”不是无效的 Json,而是无效的主机名,因为 IIS express 不允许任何连接,而是来自本地计算机。您可以尝试在上面引用的链接中欺骗它,但为什么要麻烦呢?

这是 IIS Express 托管应用的结果。

这是本地 IIS 托管应用的结果

拿到项目后这里是结果:

【讨论】:

  • 好的,我现在已经安装了 IIS,web 项目的属性/网页现在允许我选择“本地 IIS”作为服务器(以前不可用 - 想不到如果 IIS 如此重要,为什么 VS2015 默认不启用 IIS)。我在 IIS 中创建了一个网站,如果我在 IIS 管理器中浏览它,我可以访问该网站。但是现在当我尝试在 VS2015 中运行该服务时,我得到了错误 404。在 IIS 中有很多东西要学;例如我不确定在 Web 属性页面上为“项目 URL”输入什么(目前我有 localhost/quilkin,其中 quilkin 是新 IIS 站点的名称。
  • 首先让我们为您修复 VS。这是您需要做的。打开 VS2015 命令提示符并运行“aspnet_regiis.exe -i” 现在您应该可以从 VS 中选择本地 IIS。试试看,让我知道你得到了什么。我认为您没有指定正确的服务地址。它应该包括您的应用程序名称。当你从 VS 运行它时,你应该得到它。
  • 我将它创建为 web api,你看起来像 svc 服务。是WCF吗?如果您可以分享您的 Web 服务示例项目,我可以运行它并准确告诉您在 Xamarin 客户端中要做什么。
  • 你可以在电脑上试试“localhost/quilkin/Service1.svc"c”,如果你看到了,然后在模拟器上试试“descktopIpAddress/quilkin/Service1.svc
  • 感谢您的建议,尤里。我已经安装了 IIS 并且它被选中了;我尝试运行 aspnet_regiis,但被告知改用 Windows 功能,这是我昨天所做的。尝试将“service1.svc”添加到 URL 但没有成功。 Web 项目位于 github.com/quilkin/Location ,文件夹“webmap”。请忽略那里的其他项目,它们已经过时了,由于某种原因,xamarin 客户端项目失去了与 GitHub 的连接(因此需要一个新的 stackoverflow 问题!)。 .
猜你喜欢
  • 2021-05-13
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多