2017-01-17 1 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"를 사용하려고 할 때 다음 코드는 컴파일되지 않습니다 : 작업을 에뮬레이터에 필요한 IP이다 (AKA 해결 방법) : 결론적으로

[<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

Thanks Stuart. 그러나 컴파일러는 "10.0.2.2"를 꽂을 때 디자인 타임에 불평합니다. 따라서 에뮬레이터가 출시되기 전에는 IP가 아직 존재하지 않는다고 생각합니다. –

+0

나는 backward =을 가졌으므로 localhost를 사용하여 작업하고 컴파일 할 타입 제공자를 얻는다. 그런 다음 런타임에 원하는대로 'runtimeUri'을 설정하십시오. – Stuart

+0

감사합니다. 나는 화면이 전혀 검은 색이되어 데이터가없는 또 다른 문제에 부딪쳤다. 그러나 그것은 별개의 문제입니다. –

관련 문제