2016-05-05 92 views
4

我正在開發一個應用程序使用離子,我可以從我的webApi服務器檢索數據並在導航器上顯示它們ionic serve,但是當我嘗試在模擬器上執行它時:ionic run android -l -c我收到此錯誤: net::ERR_CONNECTION_REFUSED網:: ERR_CONNECTION_REFUSED離子

enter image description here

奇怪的是,該$範圍包含所需的數據,我可以記錄他們。

+0

你在你的web api上啓用了CORS嗎?另外,模擬器中的localhost是仿真器,而不是您的web api服務器。您需要在網絡上公開您的web api服務器。我通過將IIS配置爲反向代理將請求轉發到IIS Express –

+0

謝謝,但我怎麼能這樣做呢? –

+0

做什麼?啓用CORS?將您的web api服務器暴露於您的網絡?或將IIS配置爲反向代理? –

回答

4

Android設備/仿真器上的很可能是本地主機不能解析爲開發計算機/服務器的IP。本地主機可能指向設備/仿真器本身。你能打到你機器的實際IP地址嗎?或者你可以在雲中的某個地方託管Web服務並試試?

感謝, 丹

1

由於科爾多瓦的應用程序從設備文件系統加載,它有不同的起源不是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它嘗試連接到端口26309設備itseft上,而不是在運行網頁API顯影劑機。因此,您收到ERR_CONNECTION_REFUSED,因爲設備上沒有人正在偵聽該端口。

因此,而不是使用http://localhost:26309您應該使用您的開發人員機器ip地址或解析它的DNS名稱。例如http://192.168.8.162:26309http://yourMachine.yourDomain.com:26309。但是你會遇到另一個問題,你的web api運行在不允許遠程連接的開發Web服務器IIS Express上。它可以配置爲允許遠程連接,但是您必須以管理員身份執行Visual Studio。更好的解決方案是安裝IIS並將其配置爲充當反向代理。這可以在Windows 10 Pro的完成通過安裝URL rewrite and ARRconfiguring it

  1. 首先安裝IIS,進入控制面板,打開Windows功能打開或關閉 ,啓用Internet信息服務。
  2. 安裝URL從here
  3. 重寫2.0安裝應用程序請求從here
  4. 打開Internet信息服務管理器
  5. 路由3.0添加網站。設置網站名稱和物理路徑。在綁定部分,指定26308端口(我的個人約定:IIS Express端口-1)。將主機名保留爲空白。
  6. 點擊新創建的網站。在右側窗格中打開「URL Rewrite」
  7. 在操作窗格中單擊「添加規則」,選擇「反向代理」
  8. 在文本框「輸入服務器名稱或IP地址..」上寫入localhost:26309 .. 。「
  9. 單擊確定
  10. 添加TCP端口26308添加到Windows防火牆的例外規則。

現在你需要修改你科爾多瓦應用程序,使請求發送到IIS新創建的網站。它需要使請求http://192.168.8.162:26308http://yourMachine.yourDomain.com:26308

這樣就可以調試您的科爾多瓦的應用程序,並在同一時間,我的意思是,你可以添加破發點無論是網頁API應用程序。 它的工作原理爲仿真設備以及物理連接到USB的設備您將需要一個適當的無線訪問喲你的開發機器和設備。

0

由於幾個原因可能會發生此錯誤。

確保您嘗試訪問的URL有效或無效。

然後確保在後端應用程序中啓用CORS。要做到這一點,使用Microsoft.AspNet.WebApi.Cors,或者如果你正在使用OWIN然後在startup.cs配置,使用app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)(這是來自微軟.Owin.Cors

您完成此操作後,請轉到您的web.config並鍵入下面的事情:

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

這將解決這個問題。