2016-05-05 23 views
4

私はionicを使用してアプリケーションを開発していますが、WebApiサーバからデータを取得し、ionic serveというナビゲータに表示できますが、エミュレータで実行しようとするとionic run android -l -cが表示されます。 net::ERR_CONNECTION_REFUSEDnet :: ERR_CONNECTION_REFUSED ionic

enter image description here

何奇妙なことは$スコープが必要なデータが含まれていると私はそれらをログに記録可能性があることです。

+0

ウェブAPIでCORSを有効にしましたか?また、エミュレータのlocalhostは、Web APIサーバではなく、エミュレータマシンです。ネットワーク上のWeb APIサーバーを公開する必要があります。私はWindows 10でIISをリバースプロキシとして設定してIISに要求を転送するようにしました –

+0

ありがとうございます。どうすればいいですか? –

+0

何をしますか? CORSを有効にしますか?あなたのネットワークにあなたのWeb APIサーバーを公開しますか? IISをリバースプロキシとして構成する –

答えて

4

Androidデバイス/エミュレータのlocalhostよりも、開発用マシン/サーバのIPが解決されない可能性があります。 Localhostは、おそらくデバイス/エミュレータ自体を指しています。代わりにあなたのマシンの実際のIPアドレスをヒットできますか?あるいは、クラウドのどこかでWebサービスをホストして、それを試すことができますか?コルドバアプリがデバイスのファイルシステムからロードされているので

おかげで、 ダン

1

は、それがウェブAPIとは異なる起源を持っています。アプリはウェブAPIを呼び出そうとしますが、これはSame Origin Policyによって禁止されています。この問題を解決するには、ウェブ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); 
     } 
    } 
} 

デバイス上で動作しているアプリは(エミュレートまたは物理的な)それがないのWeb APIを実行している開発者のマシンに、デバイスitseft上のポート26309に接続しようとhttp://localhost:26309/databasesを呼び出す場合。したがって、デバイス上の誰もそのポートでリッスンしていないので、ERR_CONNECTION_REFUSEDを受信します。

したがって、http://localhost:26309を使用する代わりに、開発者マシンのIPアドレスまたはそれに解決されるDNS名を使用する必要があります。例えば、http://192.168.8.162:26309またはhttp://yourMachine.yourDomain.com:26309です。しかし、あなたは別の問題にぶつかります。あなたのウェブAPIは、リモート接続を許可しない開発ウェブサーバーIIS Express上で動作しています。リモート接続を許可するように設定できますが、Visual Studioを管理者として実行する必要があります。より良い解決策は、IISをインストールし、リバースプロキシとして動作するようにIISを構成することです。これはURL rewrite and ARRをインストールすることにより、プロのWindows 10で行われ、かつconfiguring itすることができます。

  1. まず、コントロールパネルのWindowsの機能の有効化または オフに、インターネットインフォメーションサービスを有効にするために行く、IISをインストールします。
  2. 2.0 3.0のWebサイトを追加
  3. を開き、インターネットインフォメーションサービスマネージャ
  4. hereからルーティングアプリケーション要求をインストール
  5. hereから書き換えURLをインストールします。サイト名と物理パスを設定します。 bindingsセクションで、26308のポートを指定します(私の個人的な慣習:IIS Expressポート-1)。ホスト名は空白のままにします。
  6. 新しく作成されたWebサイトをクリックします。右ペインで「URLリライト」を開きます。
  7. アクションパネルで「ルールの追加」をクリックし、「逆プロキシ」を選択します。
  8. テキストボックスにlocalhost:26309を入力します。「サーバー名またはIPアドレスを入力してください。 。「
  9. OKをクリックして、WindowsファイアウォールのTCPポート26308の例外ルールを追加します。

は今、あなたは、IIS上で、新しく作成されたWebサイトへの要求を行うためにあなたのコルドバアプリを変更する必要があります。それは必要あなたは同時にあなたのコルドバのアプリやウェブAPIアプリケーションをデバッグすることができます。このようにhttp://192.168.8.162:26308またはhttp://yourMachine.yourDomain.com:26308

に要求を作るために、私はあなたが両方にブレークポイントを追加することができます意味。 それはエミュレートされたデバイスだけでなく、物理のために働きますデバイスはUSBに接続されています。あなたはyoでアクセス可能な適切な無線LANが必要になりますウル開発機械と装置。

0

このエラーは、いくつかの理由により発生します。

アクセスしようとしている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> 

これで問題が解決されます。

関連する問題