2017-02-05 8 views
0

これは重複した質問かもしれませんが、既存の質問からの回答は私の問題を解決していません。AndroidエミュレータのDev MachineのLocalhost上のWebapにアクセス

WebAPIエンドポイントが自分の開発マシンで動作しています。私は

.UseUrls("http://localhost:57971", "http://10.0.2.2:57971", "http://192.168.44.1:57971", "http://192.168.1.48:57971", "http://*:57971") 

上で実行するように設定した:特別なアドレスは

192.168.44.1エミュレータネットワークの設定]タブ

10.0.2.2にデスクトップアダプタ#2でありますAndroidのエミュレータでは、Googleのドック(おそらくXamarinには関係ありません)に設定されています。

192.168.1.48は自分のローカルマシンのIPアドレスです。

私は、そのような私がアイデアをちょっとだhttp://briannoyesblog.azurewebsites.net/2016/03/06/calling-localhost-web-apis-from-visual-studio-android-emulator/

ここにしたものとして、私はかなり重く、これを調査し、指示に留意TCPポート57971.

に接続を許可するファイアウォールルールを作成しました。迷惑なことは、それは黙って失敗するということです。例外なく、出力は基本的にコード0で終了する異なるスレッドを示しています。アプリケーションは実行を継続します。すなわち、デバッグセッションは「コードエントリ」状態にIDEを戻していません。これは、他の何かがここで遊ぶことを示唆しているかもしれません。

コードは、私にはかなり無害に見える:

protected async Task<T> GetAsync<T>(string url) 
     where T : new() 
    { 
     HttpClient httpClient = CreateHttpClient(); 
     T result; 

     try 
     { 
      var response = await httpClient.GetStringAsync(url); 
      result = await Task.Run(() => JsonConvert.DeserializeObject<T>(response)); 
     } 
     catch 
     { 
      result = new T(); 
     } 

     return result; 
    } 

は、私はVisual Studioのエミュレータhttps://www.visualstudio.com/vs/msft-android-emulator/

私は車輪を得ることができる方法任意のアイデアを使用しているVisual Studioの2015年 を使用しています地上はこの物に

私のマシンをエミュレータからPingする方法はありますか?

おかげ

+0

どのような行がルージュになりますか?あなたは 'GetAsync()'を待っていますか?すでに 'GetAsync()'を待っている場合は、 'Task.Run()'を削除することをお勧めします。 – hvaughan3

+0

@ hvaughan3あなたの提案をありがとう。GetStringAsyncの呼び出しがnullを返すようです。これは、なぜ?そのエンドポイントは、私がFiddlerやブラウザでヒットしたときにjsonを返します。 – onefootswill

+0

Debug.WriteLine()ステートメントを追加して、逆シリアル化しようとする前の 'response 'とそれ以降の' result'を確認してください。通常、私は 'HttpResponseMessage response = HttpClient.SendAsync()'を使い、 'result = JsonConvert.DeserializeObject (response.Content.ReadAsStringAsync()を待つ);'を実行します(明らかにもっと多くのエラー/ヌルチェックが必要です)。 – hvaughan3

答えて

0

は、私はAPIが提供するURLのリストに追加され、XamarinアプリからそのIPアドレスと呼ばれる、すなわち169.254.80.80を使用してこの作業を得ました。

ので、Program.csの中でシンプルになりました:

.UseUrls("http://localhost:57971", "http://169.254.80.80:57971") 

私もバインディング要素隠さ.vsでApplicationConfigファイルに追加する必要がありましたASP.NET APIのフォルダ溶液。デスクトップアダプタ#4と同じ169.254.80.80でなければならない理由は不明です。

これはうまくいきました。

関連する問題