2014-12-17 3 views
0

iOS 용 에뮬레이터에서 내 앱을 실행할 때 제대로 작동합니다. 장치에서 실행하면 HttpClient에 대한 첫 번째 호출이 실패합니다. HttpClient 호출을 포함하는 클래스는 PCL에 있습니다. this bug의 인스턴스와 같습니다.HttpClient failed

그러나 iOS 프로젝트 app.config에 다음을 추가하면 문서화 된 해결 방법이 나에게 적합하지 않습니다 (system.net.http 추가).

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    ...... 
     <dependentAssembly> 
     <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.5.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

편집 : 내의 app.config에두고

는 다음과 같은 방법을 성공적으로 서버에서 데이터를 검색,하지만 읽어 실패합니다. ReadAsAsync (..)를 포함하는 맨 아래 줄에 오류가 발생하고 예외가 발생합니다. 예외는 'null'이며 터미널에 아무 것도 출력되지 않습니다. 에뮬레이터에서는 제대로 작동하지만 장치에서는 작동하지 않습니다.

public async Task<List<ExternalLoginViewModel>> GetExternalLoginsAsync() 
    { 
     using (var client = GetNewHttpClient(false)) 
     { 
      client.DefaultRequestHeaders.Remove("Authorization"); 

      var response = await client.GetAsync("api/account/externalLogins?returnUrl=/&generateState=true"); 

      response.EnsureSuccessStatusCode(); 

      return await response.Content.ReadAsAsync<List<ExternalLoginViewModel>>(); 
     } 
    } 
+0

* "... HttpClient에 대한 첫 번째 호출이 실패합니다"* - 어떻게 실패합니까? – jww

+0

그것은 특별한 방법으로 실패합니다 :-) Xamarin .. 출력이없고 예외가 "null"이기 때문에 생각합니다. – creatiive

+0

구성 파일이 모바일 프로필에서 지원되지 않아 해당 해결 방법이 실패하는 이유를 설명합니다. –

답변

0

PCL 및 iOS 프로젝트 모두에서 "Microsoft HTTP Client Libraries"nuget 패키지를 제거하면이 문제가 해결되었습니다. 그런 다음 둘 다에 다시 설치하십시오. iOS 프로젝트에는 'System.Net.Http.Extensions'및 'System.Net.Http.Primatives'에 대한 참조가 있지만 'System.Net.Http'에는 포함되지 않습니다. 다음 바인딩 리디렉션은 iOS 프로젝트의 app.config 파일에서도 사용됩니다.

<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
0

어셈블리 바인딩 리디렉션이 잘못되었습니다. 귀하의 아이폰 OS 프로젝트는이 내용과 app.config 파일이 있어야합니다

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
      <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.5.0" /> 
     </dependentAssembly> 

    </assemblyBinding> 
    </runtime> 
</configuration> 

리디렉션에 대한 이유는 Microsoft.Net.HttpClient 패키지가 System.Net.HttpClient 네임 스페이스를 포함하지만 그 이미 (심지어 약간 다른 기능) iOS 및 안드로이드에 존재 . 런타임시 잘못된 어셈블리로 해석되며 (Xamarin) 원시 iOS는 사용되지 않습니다.

iOS, Android 및 WP8 용 데모 프로젝트는 PCL의 Github repo에있는 HttpClient를 기반으로 찾을 수 있습니다.

+0

이것을 사용할 때 postasjsonasync()에 대한 호출에서 예외가 발생합니다. 예외는 "형식로드 예외가 발생했습니다"라고 말합니다. 그리고 메시지는 : " 'System.Net.Http.Formatting, ..." "어셈블리에서'System.Net.Http.ObjectContent'1 [T] '형식을로드 할 수 없습니다. app.config에서 제거하면 잘 작동합니다. – creatiive

+0

레포에서 데모를 사용 했습니까? – Krumelur

+0

iOS 프로젝트의 repo에 대한 지침을 따랐습니다. app.config에 섹션을 추가하고 한 줄을 packages.config에 추가했습니다. 'postasjsonasync()'에 대한 호출이 발생할 때 발생하는 전체 오류를 표시하기 위해 내 기본 게시물을 편집했습니다. – creatiive