2017-01-17 10 views
2

Androidエミュレータのローカルホストでタイププロバイダを使用できません。Androidエミュレータのローカルホストでタイププロバイダを使用できません

TypeProviderが設計時に接続を確立するため、F#のタイププロバイダを使用している場合、これは私にとっては役に立ちません。私は

[<Literal>] 
let JsonPath = "http://localhost:48213/api/cars" 
type Repository = JsonProvider<JsonPath> 

は、しかし、私はローカルホストのパスを使用しようとしたとき接続がを拒否した受信localhostを使用する場合

タイププロバイダは幸せです。このエラーの詳細はhereです。私は10.0.2.2

を交換使用する場合

10.0.2.2

タイププロバイダが幸せではない」:

その結果、私は解像度が代替IPアドレスを使用することであると信じてIPアドレス上のlocalhost "" 10.0.2.2 "が、更新されたIPアドレスへの接続を確立していないTypeProviderからのコンパイルエラーを引き起こします。

私は代替IPとして「10.0.2.2」(AKA:回避策)を使用しようとすると、次のコードはコンパイルされませんエミュレータを動作させるために必要なIPです:結論

[<Literal>]  (* "10.0.2.2" is the workaround IP for local host *) 
let JsonPath = "http://10.0.2.2:48213/api/cars" 
type Repository = JsonProvider<JsonPath> 

type Car = { Make:string ; Model:string } 

let getCars() = 

    Repository.Load JsonPath 
    |> Array.toSeq 
    |> Seq.map(fun x -> { Make=x.Make ; Model=x.Model }) 

を、ローカルで実行されるWebAPIサービスを介してファイルにアクセスするにはどうしたらいいですか?また、タイププロバイダをエミュレータでタイププロバイダを実行するときに幸せに保ちますか?

答えて

5

JsonProviderを作成するときに提供する静的パラメータは、デザイン時のみのため、タイプを生成するためのものです。 Repositor.Loadに電話すると、実行時に使用するuriになります。次のように別々に扱う必要があります。

[<Literal>] 
let DevelopmentJsonPath = "http://localhost:48213/api/cars" 

type Repository = JsonProvider<DevelopmentJsonPath> 

type Car = { Make:string ; Model:string } 

let runtimeUri = "http://production.mycompany.com/api/cars" 
let getCars() = 

    Repository.Load runtimeUri 
    |> Array.toSeq 
    |> Seq.map(fun x -> { Make=x.Make ; Model=x.Model }) 
+0

ありがとうございます。ただし、 "10.0.2.2"を差し込むと、コンパイラは設計時に不平を言います。したがって、エミュレータが起動されるまで、IPはまだ存在していないと思います。 –

+0

私はそれを後方に持っていました=)だからlocalhostを使って型プロバイダを取得してコンパイルしてください。ランタイムに必要なものに 'runtimeUri'を設定します。 – Stuart

+0

ありがとうございます。私は別の問題に遭遇しました。そこでは、私の画面はデータなしで完全に黒くなります。しかしそれは別の問題です。 –

関連する問題