2013-05-19 4 views
0

Windows 7 서버에서 Windows 서비스로 실행되는 WCF 서비스와 통신해야하는 Windows 8 스토어 앱에서 작업을 시작했습니다. 바인딩은 보안이없는 net.tcp입니다 (아직). 필자는 또한 Package.appxmanifest 파일에 들어가서 내 메인 응용 프로그램 프로젝트와 유닛 테스트 프로젝트에서 "인터넷 (클라이언트)"및 "개인 네트워크 (클라이언트 및 서버)"를 선택했습니다. 이것은 단위 테스트 프로젝트에서 잘 작동하지만 Windows 7 컴퓨터에서 실행되는 WCF 서비스와 통신 할 수는 있지만 Windows 8 앱 자체에서는 서비스에 액세스 할 수 없습니다. 응용 프로그램은 webservice 프록시에 대한 호출에 중단됩니다. 권한/매니페스트 기능으로 간단한 것을 놓치고 있습니까?Windows 스토어에서 WCF 서비스에 액세스하기 앱이 응답하지 않음

편집 : 실제로 작동 시켰습니다. 내 서비스 인터페이스가 Task<IList<MyDataObj>>이고 구현이 비동기였습니다 (메서드 구현시 async 키워드 사용). 단위 테스트에서 실행했을 때, 나는 GetItems(), 그 다음에 Wait()을 돌려 주겠다. 이것을 앱에 복사하면 작동하지 않습니다. 응용 프로그램에서 코드를 변경하고 await 작업 호출을 대신 처리하면 WCF 서비스로 호출됩니다. 이 질문에 대한 나의 질문은 두 환경의 차이점은 무엇이며 전화가 끊기게되는 원인은 무엇일까요?

답변

2

이 교착 상태 상황 on my blogin an MSDN article에 대해 설명합니다.

짧은 요약은 await (기본값)은 현재 컨텍스트를 캡처하고 해당 컨텍스트 내에서 async 메서드를 다시 시작한다는 것입니다.

UI 응용 프로그램에서 해당 컨텍스트는 UI 컨텍스트이지만 Wait을 호출하여 스레드를 차단하는 경우 async 메서드는 UI 컨텍스트를 다시 입력 할 수 없습니다.

(대부분의) 단위 테스트 프레임 워크에서 컨텍스트는 스레드 풀 컨텍스트이므로 Wait은 하나의 스레드 풀 스레드 만 차단하고 async 메서드는 다른 스레드에서 계속할 수 있습니다.