2016-08-30 6 views
0

클라이언트 중 하나에 LOB (기간 업무) Windows 8.1 응용 프로그램을 개발했습니다. 이 응용 프로그램은 Visual Studio 2015에서 64 비트 Windows 8.1 Enterprise 랩톱으로 개발되었습니다. 이 응용 프로그램은 동일한 랩톱에서 IIS Express로 실행되는 RESTful 웹 API를 사용합니다. IIS Express는 RESTful 웹 API를 외부 세계에 공개하도록 구성되어 있으므로 다른 컴퓨터에서 Fiddler를 사용하여 웹 API 호출을 할 수 있습니다. 내 응용 프로그램은 VS2015 시뮬레이터로 테스트 할 때 웹 호스트의 정확한 IP 주소 (로컬 호스트가 아님)를 사용하도록 구성하더라도 잘 작동합니다.측면로드 Windows 8.1 응용 프로그램은 RESTful 웹 API의 메서드를 호출 할 때 예외를 생성합니다.

클라이언트는 Windows 10을 실행할 일부 DELL 태블릿에서 프로덕션으로이 응용 프로그램을 배포하려고합니다.이 태블릿 중 하나가 있으며 64 비트 Windows 10 Enterprise가 있습니다. 태블릿에서 내 앱을 사이드로드 할 때이를 실행하고 설정에서 웹 API 서비스의 URL을 저장합니다. 앱을 다시 시작했지만 웹 API에 대한 첫 번째 호출이 완료되지 않습니다. "요청을 보내는 동안 오류가 발생했습니다"라는 예외를 기록합니다. 내부 예외 메시지는 "원격 서버에 연결할 수 없습니다"입니다. 이 예외를 트리거 코드의 행이 하나 :

WebApiHttpClient 오브젝트 이렇게 구성된 클래스 정적 구성원
HttpResponseMessage response = await WebApiHttpClient.GetAsync("api/user", HttpCompletionOption.ResponseContentRead).ConfigureAwait(continueOnCapturedContext: false); 

:

if (WebApiHttpClient == null) 
{ 
    WebApiHttpClient = new HttpClient(WebApiAuthClientHandler) 
    { 
     BaseAddress = new Uri(_serviceUri), // _serviceUri is a string that looks like this "http://10.120.5.201:53045" 
     Timeout = new TimeSpan(0, 0, 150) 
    }; 

    WebApiHttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
} 

WebApiAuthClientHandler은 인스턴스화되는 클래스에 정적 부재 인 이 타임 아웃이 될 수 없도록 제한 시간을 150 초로 설정되어 있기 때문에 예외가 내 전화 후 약 21 초 트리거

if (WebApiAuthClientHandler == null) 
{ 
    WebApiAuthClientHandler = new HttpClientHandler() 
    { 
     Credentials = CredentialCache.DefaultNetworkCredentials, 
     ClientCertificateOptions = ClientCertificateOption.Automatic 
    }; 
} 

이 같은 .

앞에서 언급 한 것처럼 node.js iisexpress-proxy 도구를 사용하여 웹 API가 랩톱에서 실행 중입니다. 로컬 URL을 외부 세계에 공개하여 Fiddler를 사용하여 웹 API 호출을 할 수 있도록했습니다. 태블릿.

또한 내 앱의 Package.appxmanifest/Capabilities에서 "개인 네트워크 (클라이언트 & 서버)"를 선택했습니다.

이벤트 뷰어는 추가 정보를 기록하지 않습니다.

누구든지 오류가 발생하는 이유에 대해 제안 할 수 있습니까? TIA, 에디

+0

응용 프로그램이 Windows 인증을 사용해야 함을 잊어 버렸습니다. 따라서 HttpClientHandler가 생성되는 특별한 방법을 사용해야합니다. – Eddie

+0

언급할만한 다른 점은 웹 API의 URL에 대한 필터를 실행 중이지만 지정된 IP 주소와 포트로 향하는 트래픽의 모든 시도를 캡처 할 수 있어야하지만 피들러가 웹 API 호출에 대한 시도를 기록하지 않는다는 점입니다 . 이는 "GetAsync"통화가 태블릿에서 나가기조차하지 않는다는 것을 의미합니다. – Eddie

+0

이 질문에 컨텍스트를 추가하려면 예외에 중첩 된 메시지에 다음과 같이 표시됩니다. "연결된 당사자가 일정 기간 후에 제대로 응답하지 않았거나 연결된 호스트가 응답하지 않아 연결이 실패한 경우 연결 시도가 실패했습니다. 127.0.0.1 : 8888 " – Eddie

답변

0

제 3 의견에 오류 메시지가 나타나는 것은 내가 동시에 피들러를 실행했기 때문입니다. Fiddler없이 실행하면 응용 프로그램이 다른 오류를 수신하지만 StackOverflow에서 다른 질문의 대상이됩니다.