Windows 8의 Metro 앱이 같은 컴퓨터의 백엔드 데스크톱 앱과 어떻게 통신 할 수 있습니까?
Windows 8의 새로운 Metro 스타일 앱을 사용하여 UI 프런트 엔드를 빌드하고 동일한 로컬 컴퓨터 (예 : Windows 서비스 앱)의 데스크톱에서 실행되는 .NET 응용 프로그램과 통신하려는 경우.
메트로 앱과 데스크톱 앱간에 어떤 프로세스 간 통신이 제공됩니까?
Visual Studio 팀의 Pavel Minaev에게 감사의 말을 전합니다.
Martyn Lovell에 따르면 고의적 인 메커니즘은 없으며 의도적으로 제한 될 수 있습니다. 예를 들어 명명 된 파이프는없고 메모리 매핑 된 파일도 없습니다. 소켓 (서버 소켓 포함)이 있지만 localhost에 연결할 때 동일한 앱에만 연결할 수 있습니다. 공유 "알려진 폴더"(문서, 그림 등) 중 하나에서 일반 파일을 사용할 수 있지만 폴링이 필요하고 사용자에게 표시되는 상당히 거친 해킹입니다. - 파벨 Minaev은 에 주석 이 문제
그래서 일반적인 접근 방식의 실패는 어떤 형태의 통신이 일어나기 위해 웹 서비스를 사용하거나 데이터베이스에 대한 읽기 / 쓰기를 생각하고있었습니다. 둘 다 프로세스가 동일한 컴퓨터에서 실행될 때 과도한 것으로 보입니다.
내가 여기서 시도하는 것이 의미가 있습니까? 데스크톱에서 실행되는 기존 서비스의 메트로 엔드 UI가 메트로 앱이어야한다는 것을 알 수 있습니다. 또는 데스크톱에서 실행되는 프론트 엔드 UI (즉, 비 메트로 앱)에 WPF를 사용하는 것이 좋습니다.
기존 프로젝트를 지금 Win8로 이식하고 있습니다. NamedPipes WCF를 통해 서로 통신하는 Windows 서비스 및 트레이 응용 프로그램으로 구성됩니다. 이미 알고 있듯이 Metro는 명명 된 파이프를 지원하지 않습니다. 전 이중 연결을 위해 TcpBinding을 사용했습니다.
이 게시물 에서는 지원되는 기능에 대해 설명합니다.
Metro 클라이언트가 사용할 수있는 WCF 서버 샘플은 다음과 같습니다 .
Metro에서는 동기식 WCF를 사용할 수 없습니다. 비동기식 인 작업 기반 래퍼 를 사용해야 합니다.
그리고 질문 감사합니다. 나는 나를 위해 좋은 출발점이었다 :)
내가 참석 한 // build / 세션이 끝날 때 이와 같은 질문이 많이있었습니다. 큰 사진 세션 중 하나를 수행 한 임원 인 Aleš Holeček은이를 처리하기 위해 청중으로부터 나왔습니다. C ++ 개발자가 아니더라도 해당 세션을 다운로드하여 Q & A를보십시오. http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C
Metro 앱은 컴퓨터에 설치되는 데스크톱 앱 또는 서비스에 의존 할 수 없습니다. 또한 데스크톱 앱은 일시 중단 될 수 있으므로 실행중인 Metro 앱을 신뢰할 수 없습니다. 다르게 생각하기 시작해야합니다. 이것에 대한 Aleš의 말을 들어보십시오.
Windows 8.1 업데이트에서는 Windows 스토어 앱과 .NET 4.5 이상용 C #으로 작성된 데스크톱 구성 요소 간의 통신이 엔터프라이즈 시나리오의 측면로드 된 응용 프로그램에 대해 공식적으로 지원됩니다.
사이드로로드 된 Windows 스토어 앱을위한 중개 된 Windows 런타임 구성 요소
인용 :
Windows 8.1 업데이트에는 중요한 비즈니스 기능과 규칙이 기존 소프트웨어 자산에 구현되어 있고 새로운 응용 프로그램 스타일의 생산성이 향상 될 수있는 다양한 시나리오가 있음을 인식하고 사이드로드 용 중개 된 Windows 런타임 구성 요소라는 새로운 기능이 포함되어 있습니다. 신청. IPC (프로세스 간 통신)라는 용어를 사용하여 Windows 스토어 앱에서이 코드와 상호 작용하면서 하나의 프로세스 (데스크톱 구성 요소)에서 기존 데스크톱 소프트웨어 자산을 실행하는 기능을 설명합니다. 이것은 Windows에서 NT 서비스를 사용하는 데이터베이스 응용 프로그램 및 응용 프로그램이 유사한 다중 프로세스 아키텍처를 공유하기 때문에 엔터프라이즈 개발자에게 친숙한 모델입니다.
이 방법을 구현하는 것은 처음에는 다소 복잡하지만 Windows 스토어와 데스크톱 구성 요소간에 긴밀하게 통합 할 수 있습니다. 당분간은 공개 Windows 스토어 인증을 통과하지 못합니다.
프로토콜 핸들러를 사용하여 느슨하게 결합 된 Metro 앱을 빌드하는 방법 에 대한 InfoQ 관련 기사 가 있습니다 . 이것은 Windows에서 오랫동안 지원해 왔으며 데스크톱 응용 프로그램이 프로토콜 핸들러로 등록 될 수 있으며 메트로 응용 프로그램이이 메커니즘을 통해 통신 할 수 있습니다.
이것이 가능한지 모르겠지만 체크 아웃하는 것이 흥미로울 수 있습니다.
Christophe Nasarre는 로컬 파일을 사용하여 해킹 하는 방법에 대한 블로그 를 작성했습니다. 결과적으로 두 앱의 UI간에 전환하지 않고도 데스크톱 앱 / Windows 스토어 앱 (블로그에서 DA / WSA라고 함) 간의 통신이 이루어집니다. 또한 프로토콜 핸들러와 관련된 덜 해킹 된 기술에 대해서도 블로그에 올렸습니다.
DA와 통신하는 WSA를 보유하는 것은 스토어 앱 인증 요구 사항에 의해 명시 적으로 금지 됩니다.
Windows 스토어 앱은 파일 및 레지스트리 키를 포함한 로컬 메커니즘을 통해 로컬 데스크톱 응용 프로그램 또는 서비스와 통신해서는 안됩니다.
...하지만 "로컬 메커니즘"만 제한합니다. 그래서 통신 라우팅을 위해 웹 서비스를 구축 할 수 있다고 생각합니다.
추가 수동 cmd 작업을 수행 할 수 있다고 생각되면 다음을 시도하십시오.
X:/> CheckNetIsolation.exe LoopbackExempt –a –n=<packageID>;
CheckNetIsolation.exe는 winRT 설치에 포함되어 있으므로 추가로 설치할 것이 없습니다.
나는 그것을 시도했다 : 그것은 패키지 업데이트 후에도 작동한다.
http://msdn.microsoft.com/en-us/library/windows/apps/Hh780593.aspx에 표시된대로
다음은 앱의 패키지 ID를 찾는 방법에 대한 설명입니다. http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/82bad7d4-d52b-4731-a396-13ab9004c1cc/how-to-get- 메트로폴리탄 스타일의 앱
로컬 서비스를 사용하여 Metro 앱에서 데스크톱 앱으로 동일한 컴퓨터에서 통신 할 수 있습니다. 얼마 전에 로컬 서비스를 사용하여 WinRT 샌드 박스를 우회하는 방법 인 간단한 "개념 증명"을 구현했습니다. 여전히 서비스 설치를위한 일종의 "사회 공학"또는 직접 안내서가 필요하지만 어쨌든 가능합니다.
Windows 스토어에 해당 앱을 추가 할 때 "로컬 서비스"통신에 대한 인증 규칙에 대해 잘 모르겠습니다.
설계 상 Metro 응용 프로그램은 WinRT API 및 사용 가능한 기능 만 사용하여 기본 PC에 직접 액세스 할 수 없습니다. 그러나 PC 및 모든 데이터에 액세스하기위한 백엔드 서비스를 만들면 기본적으로 더 이상 샌드 박스에서 실행되지 않습니다.
The only "problem" is that user must manually install this back-end service, but that won't be a problem using some "social engineering": User downloads "PC browser" Metro app, user can browse all pictures, music and videos, using WinRT API, but the app also shows message at the bottom: "Download our PC browser powerpack and browse your entire PC, for FREE"
User is redirected to web page, from where user can download classic desktop installer containing "PC browser" back-end service for accessing files on users entire PC. Once this desktop service is installed, the Metro app can detect it and use it for browsing the entire PC. User is happy, but the WinRT sandbox is compromised.
물론 이것은 Windows 8 ARM 태블릿에서는 작동하지 않습니다. 이 대안을 사용하면 안티 바이러스, 토렌트 / P2P 클라이언트 등과 같은 클래식 데스크톱 앱을위한 Metro 앱 클라이언트를 구축 할 수도 있습니다.
어쩌면 요점을 놓쳤을 수도 있지만 개인 네트워크 기능을 활성화 할 때 로컬 호스트가 아닌 로컬 IP 주소를 사용하여 로컬 실행중인 (http) 서버에 연결할 수 있습니다. 이것은 winrt 앱이 wpf 데스크톱 앱과 통신하는 시나리오를 가능하게합니다.
'Programing' 카테고리의 다른 글
jar 파일 내부에서 "폴더"리소스를 얻으려면 어떻게해야합니까? (0) | 2020.07.16 |
---|---|
수백만 개의 픽셀이있는 2D 박스없는 픽셀 배열에는 어떤 Haskell 표현이 권장됩니까? (0) | 2020.07.16 |
git으로 이름이 바뀐 파일의 로그를 실제로 표시하는 방법은 무엇입니까? (0) | 2020.07.16 |
history.replaceState () 예제? (0) | 2020.07.16 |
레거시 코드의 리팩토링 연습을위한 Katas 코딩 (0) | 2020.07.16 |