cordova net::ERR_CONNECTION_REUSED离子连接拒绝错误

i7uq4tfw  于 2022-11-15  发布在  其他
关注(0)|答案(6)|浏览(649)

我正在使用ionic开发一个应用程序,我可以从webApi服务器检索数据,并使用ionic serve在导航器上显示它们,但当我尝试在模拟器上执行它时:ionic run android -l -c我得到这个错误:net::ERR_CONNECTION_REFUSED

奇怪的是,$scope 包含所需的数据,我可以记录它们。

7kqas0il

7kqas0il1#

Android设备/模拟器上的localhost很可能没有解析到您的开发机器/服务器的IP。Localhost可能指向设备/模拟器本身。您能点击您机器的实际IP地址吗?或者您能在云中的某个地方托管Web服务并尝试这样做吗?
谢谢,丹

jdgnovmf

jdgnovmf2#

在您的仿真器中(Ionic应用程序正在仿真器中运行),http://localhost不再指向您的计算机,而是指向仿真设备。了解这一点,http://localhost:26309/api/User/getAll/在您的设备中不是有效的端点,因此请求失败。
要解决此问题,您有两种选择:
第一个选项是在你的Ionic应用中创建一个简单的代理。

{
  "name": "appname",
  ...
  "proxies": [
    {
      "path": "/localhost",
      "proxyUrl": "http://localhost:26309"
    }
  ]
}

现在,当从你的Ionic应用程序中请求时,只需写/localhost/api/User/getAll/,它就应该工作了。
第二种选择是使用您计算机的私有IP作为端点域。

lrpiutwd

lrpiutwd3#

由于cordova应用程序是从设备文件系统加载的,因此它的来源与web api不同。应用程序尝试调用web api,但这被Same Origin Policy禁止。要解决此问题,您需要在web api上执行enable CORS
要启用CORS,您需要安装Microsoft.AspNet.WebApi.Cors NuGet包并使用EnableCors属性。例如:

using System.Collections.Generic;
using System.Web.Http;
using System.Web.Http.Cors;
using WebApiServer.Models;

namespace WebApiServer.Controllers
{
    [RoutePrefix("databases")]
    [EnableCors("*", "*", "*")]
    public class DatabasesController : ApiController
    {
        [Route("")]
        [HttpGet]
        public IHttpActionResult Get()
        {
            var databases = new List<DatabaseCategory>()
            {
                new DatabaseCategory
                {
                    CategoryName = "Bases de datos relacionales",
                    Databases = new List<Database>()
                    {
                        new Database() { DatabaseName = "SQL Server" },
                        new Database() { DatabaseName = "Oracle" },
                        new Database { DatabaseName = "PostgreSQL" }
                    }
                },
                new DatabaseCategory
                {
                    CategoryName = "Bases de datos NoSQL",
                    Databases = new List<Database>()
                    {
                        new Database() { DatabaseName = "RavenDB" },
                        new Database { DatabaseName = "CouchBase" },
                        new Database { DatabaseName = "MongoDB" }
                    }
                }
            };
            return Ok(databases);
        }
    }
}

如果运行在设备(模拟的或物理的)上的应用调用http://localhost:26309/databases,它会尝试连接到设备itseft上的端口26309,而不是连接到运行web api的开发者机器上,所以你会收到ERR_CONNECTION_REFUSED,因为设备上没有人在监听那个端口。
因此,您应该使用您的开发人员计算机的ip地址或解析为该地址的DNS名称,而不是使用http://localhost:26309。例如,http://192.168.8.162:26309http://yourMachine.yourDomain.com:26309。但是,您将遇到另一个问题,您的web api运行在不允许远程连接的开发web服务器IIS Express上。可以将其配置为允许远程连接,但这样你就必须以管理员身份执行Visual Studio。一个更好的解决方案是安装IIS并将其配置为反向代理。这可以在Windows 10专业版中通过安装URL rewrite and ARRconfiguring it来完成:
1.首先安装IIS,转到“控制面板”,“打开或关闭Windows功能”,“启用Internet信息服务”。
1.从here安装URL重写2.0
1.从here安装应用程序请求路由3.0
1.打开Internet信息服务管理器
1.添加Web站点。设置站点名称和物理路径。在绑定部分,指定26308端口(我的个人约定:IIS Express端口-1)。将主机名留空。
1.点击新创建的网站。在右边的窗格中打开“URL重写”
1.在“操作”窗格上,单击“添加规则”,选择“反向代理”
1.在“输入服务器名称或IP地址...”文本框中写入localhost:26309
1.单击确定
1.将TCP端口26308的例外规则添加到Windows防火墙。
现在,您需要修改cordova应用程序,以便向IIS上新创建的网站发出请求。
这样你就可以同时调试你的cordova应用和web api应用,我的意思是你可以给两者都添加断点。它适用于模拟设备以及连接到USB的物理设备。你需要一个合适的wifi来连接你的开发机器和设备。

ppcbkaq5

ppcbkaq54#

2020更新。对我有效的方法:

ionic cordova run android --no-native-run --livereload --external

也将此添加到config.xml

<platform name="android">
        <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
            <application android:usesCleartextTraffic="true" />
        </edit-config>
...
</platform>
uurv41yg

uurv41yg5#

**2022年问题:**也遇到了同样的问题,发现使用ionic cordova run android -livereload时,当我正常运行应用程序时,它给了我这个错误:

net::ERR_CONNECTION_REFUSED当我检查我的配置时,我发现-livereload标志将src="http://localhost:8100"添加到此
<content original-src="index.html" src="http://localhost:8100" />
而不是:
<content src="index.html" />

yvt65v4c

yvt65v4c6#

发生此错误的原因有几个。
请确保您尝试访问的URL有效或无效。
然后,确保在后端应用程序中启用了CORS。为此,请使用Microsoft.AspNet.WebApi.Cors,或者,如果您使用的是OWIN,则在startup.cs配置中使用app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)(这来自Microsoft.Owin.Cors
完成此操作后,请转到您的web.config并键入以下内容:

<system.webServer>
 <httpProtocol>
      <customHeaders>
        <clear/>
        <add name="Access-Control-Allow-Credentials" value="true"/>
      </customHeaders>
    </httpProtocol>
</system.webServer>

这样就能解决问题。

相关问题