Windows 8의 Metro 앱은 동일한 컴퓨터의 백엔드 데스크톱 앱과 어떻게 통신 할 수 있습니까?


120

Windows 8 용 앱의 새로운 Metro 스타일을 사용하여 빌드 된 UI 프런트 엔드가 있고 동일한 로컬 컴퓨터 (예 : Windows 서비스 앱)의 데스크톱에서 실행되는 .NET 응용 프로그램과 통신하려는 경우.

메트로 앱과 데스크톱 앱간에 어떤 형태의 프로세스 간 통신을 사용할 수 있습니까?

여기에 주석으로 몇 가지 초기 정보를 제공 한 Visual Studio 팀의 Pavel Minaev에게 감사드립니다.

Martyn Lovell에 따르면이를위한 고의적 인 메커니즘이 없으며이를 위해 사용할 수있는 일부는 의도적으로 제한됩니다. 예를 들어 명명 된 파이프는 존재하지 않으며 메모리 매핑 파일도 없습니다. 소켓 (서버 소켓 포함)이 있지만 localhost에 연결할 때는 동일한 앱에만 연결할 수 있습니다. 공유 된 "알려진 폴더"(문서, 그림 등) 중 하나에서 일반 파일을 사용할 수 있지만 이는 폴링이 필요하고 사용자에게 표시되는 상당히 조잡한 해킹입니다. - 파벨 Minaev은 에 주석 이 문제

그래서 정상적인 접근 방식에 실패하면 어떤 형태의 통신이 일어나기 위해 웹 서비스를 사용하거나 데이터베이스에 대한 읽기 / 쓰기를 생각하고 있었는데, 둘 다 프로세스가 동일한 시스템에서 실행 중일 때 과잉처럼 보였습니다.

내가 여기서 시도하는 것이 의미가 있습니까? 데스크톱에서 실행되는 기존 서비스의 프런트 엔드 UI가 메트로 앱이 필요하다는 것을 알 수 있습니다. 또는 데스크톱에서 실행되는 프런트 엔드 UI (예 : 메트로가 아닌 앱)에 WPF 만 사용하는 것이 좋습니다.


2
로컬 WCF 서비스는 어떻습니까?
Gleno

2
질문에서 "웹 서비스 사용에 대한 생각"을 다룰 @Gleno. 즉, .NET Core에서 제공되는 WCF 클라이언트 라이브러리의 구현이 WinRT 소켓 위에 빌드 된 경우 작동할지 여부가 궁금합니다. 아마도 동일한 "로컬 호스트 없음"제한이 적용될 것입니다. 이것을 확인해야합니다.
Pavel Minaev 2011 년

1
WCF의 NetNamedPipeBinding 및 NetTcpBinding (localhost를 통해)은 메트로의 제한으로 인해 어쨌든 사용할 수없는 것 같습니다. 웹 서비스 또는 MSMQ 바인딩을 남길까요? 솔직히 말해서 WCF 자체가 지하철에서 사용 가능한지 확실하지 않습니다.
dodgy_coder 2011 년

6
질문을 돌려 보겠습니다. 통신중인 데스크톱 서비스가 없으면 어떻게됩니까? 응용 프로그램은 저장소에서만 설치할 수 있으므로 데스크톱 서비스의 존재 여부에 의존 할 수 없습니다.
ReinstateMonica Larry Osterman 2011 년

3
기업은 맞춤형 앱을 사이드로드하고 Windows 스토어를 우회 할 수있는 것으로 보입니다. 그렇다면 일부 응용 프로그램이 엔터프라이즈 환경에서 실행되고 있다고 가정 할 수 있습니다. 즉, 원래 포스터는 그의 목적을 위해 데스크톱 WPF 프런트 엔드를 사용해야한다고 생각합니다.
Ankur Goel 2011 년

답변:


54

현재 기존 프로젝트를 Win8로 이식하고 있습니다. NamedPipes WCF를 통해 서로 통신하는 Windows 서비스 및 트레이 응용 프로그램으로 구성됩니다. 이미 알고 계시 겠지만 Metro는 명명 된 파이프를 지원하지 않습니다. 나는 전이중 연결을 위해 TcpBinding을 사용했습니다.

이 게시물 은 지원되는 기능에 대해 설명합니다.

Metro 클라이언트가 사용할 수있는 내 WCF 서버의 샘플은 여기에 있습니다 .

또한 Metro에서는 동기 WCF를 사용할 수 없습니다. 비동기식 작업 기반 래퍼 를 사용해야 합니다.

그리고 질문 해주셔서 감사합니다. 나는 나를 위해 좋은 출발점이었다 :)


7
감사합니다 ... 큰 도움이됩니다. 해서는 안된다는 말을 듣는 대신 실용적인 대답을 보는 것이 좋습니다.
dodgy_coder 2012

1
어리석은 질문 일 수 있지만 샘플을 사용하여 localhost에 연결할 수 있습니까? 링크하는 질문은 Visual Studio의 내부를 보여줍니다 (경로에서 추론했지만 틀린 경우 수정하십시오). WCF (localhost와 결합)는 WCF 외부에서 작동합니까?
dzendras

1
@dzendras 물론입니다. localhost에서도 작동합니다.
전문가

3
그래도 이와 같은 앱이 스토어 인증을 통과 할 것 같지는 않습니다.
Ani

6
이것이 규칙이라면 "3.9 모든 앱 로직은 귀하의 앱 패키지에서 시작되고 상주해야합니다. 귀하의 앱은 코드 또는 코드의 동적 포함을 통해 패키징 된 콘텐츠를 변경하거나 확장하려고 시도해서는 안됩니다. 응용 프로그램이 Windows 런타임과 상호 작용하거나 저장소 정책과 관련하여 작동하는 방식을 변경하는 데이터입니다. 예를 들어 원격 스크립트를 다운로드 한 다음 앱 패키지의 로컬 컨텍스트에서 해당 스크립트를 실행하는 것은 허용되지 않습니다. "
Ani

38

내가 참석 한 // build / 세션의 끝에 이와 같은 많은 질문이있었습니다. 큰 그림 세션 중 하나를 수행 한 임원 인 Aleš Holeček이 청중에서 나와이를 처리했습니다. C ++ 개발자가 아니더라도 해당 세션을 다운로드하고 Q & A를 시청하세요. http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C

Metro 앱은 컴퓨터에 설치된 데스크톱 앱이나 서비스를 믿을 수 없습니다. 또한 데스크톱 앱은 언제든지 일시 중단 될 수 있기 때문에 실행중인 Metro 앱을 믿을 수 없습니다. 다르게 생각해야합니다. 이것에 대한 Aleš를 들어보십시오.


6
이 정확한 질문은 비디오에서 47:20에 묻는 것 같습니다.
Pavel Minaev 2011 년

3
... 55:00에 한 번 더. 일반적으로 말하면 대답은 "당신은 그렇게 할 수 없습니다"입니다.
Pavel Minaev

1
@dodgy_coder WCF / TCP (또는 HTTP)가 동일한 컴퓨터에서 작동하는지 잘 모르겠습니다. 샌드 박스가 localhostTCP 소켓을 통해 직접 연결할 수없는 경우 WCF를 통해 동일한 작업을 수행 할 수있는 이유는 무엇입니까?
Pavel Minaev 2011 년

2
흥미롭게도 공유 계약을 통해 두 메트로 앱 간의 통신을 지원하는 기능이 내장되어 있지만 이는 클립 보드 사용과 유사하며 소스 앱에서 대상 앱으로 단방향 전송을 구현하는 것보다는 -way 통신 프로토콜.
dodgy_coder

4
테스트 용으로로드 된 LOB Metro 앱은 설치된 데스크톱 앱 또는 서비스에 따라 문제가 없을 것 같습니다. 이 매우 실용적인 시나리오가 지원되지 않을 것이라고 믿기가 어렵습니다. Silverlight를 사용하면서 데스크톱 / 네이티브 interop 기능이 점진적으로 증가하는 것을 확인했습니다. 이러한 시나리오 (이름이 지정된 파이프, 메모리 매핑 파일 등 ...)가 지원 될 것이라고 확신합니다 (지침 문서 포함). 미래에.
데이비드 Cuccia

11

Windows 8.1 업데이트를 통해 .NET 4.5 이상용 C #으로 작성된 Windows 스토어 앱과 데스크톱 구성 요소 간의 통신이 이제 엔터프라이즈 시나리오의 테스트 용로드 애플리케이션에 대해 공식적으로 지원됩니다.

테스트 용으로로드 된 Windows 스토어 앱을위한 조정 된 Windows 런타임 구성 요소

인용하려면 :

중요한 비즈니스 기능과 규칙이 기존 소프트웨어 자산에 구현되어 있고 기업이 새로운 응용 프로그램 스타일의 생산성이 높은 다양한 시나리오를 가지고 있음을 인식하고 Windows 8.1 업데이트에는 테스트 용으로로드 할 수있는 Brokered Windows Runtime Components라는 새로운 기능이 포함되어 있습니다. 응용 프로그램. IPC (프로세스 간 통신)라는 용어를 사용하여 Windows 스토어 앱에서이 코드와 상호 작용하는 동안 하나의 프로세스 (데스크톱 구성 요소)에서 기존 데스크톱 소프트웨어 자산을 실행하는 기능을 설명합니다. 이는 Windows에서 NT 서비스를 사용하는 데이터베이스 응용 프로그램과 응용 프로그램이 유사한 다중 프로세스 아키텍처를 공유하므로 엔터프라이즈 개발자에게 친숙한 모델입니다.

이 접근 방식을 구현하는 것은 처음에는 다소 복잡한 측면이지만 Windows 스토어 및 데스크톱 구성 요소간에 심층적 인 통합이 가능합니다. 당분간은 공개 Windows Store 인증을 통과하지 못할 것임을 명심하십시오.


5

InfoQ에 대한 기사있습니다.프로토콜 핸들러를 사용하여 느슨하게 결합 된 Metro 앱을 빌드하는 방법 에 대한 . 이것은 Windows에서 오랫동안 지원되어 왔으며 데스크톱 응용 프로그램이 자신을 프로토콜 처리기로 등록하고 메트로 응용 프로그램이이 메커니즘을 통해 통신 할 수 있다고 예상 할 수 있습니다.

이것이 가능한지 모르겠지만 확인하는 것이 흥미로울 수 있습니다.


기사에서는 "Metro에서이 작업을 수행 할 수있는 방법은 [다른 응용 프로그램의 다른 워크 플로로 이동-앱이 작고 집중도가 높기 때문에] 프로토콜을 활용하는 것입니다. 위의 예제에서 프로토콜은 다음과 같을 수 있습니다. "acme-stock-purchase : // client = 123 & stock = XYZ" " -기술적으로 "프로토콜 활용"이란 무슨 뜻입니까?
Lumi 2011

이 접근 방식의 문제점은 단방향 통신이라는 것입니다.
전문가

3

Christophe Nasarre는 로컬 파일을 사용하는 다소 엉뚱한 방법에 대해 블로그올렸 습니다. 그 결과 두 앱의 UI간에 전환 할 필요없이 데스크톱 앱 / Windows 스토어 앱 (블로그에서는 DA / WSA라고 함) 간의 통신이 이루어집니다. 그는 또한 프로토콜 핸들러와 관련된 또 다른 덜 해킹 된 기술에 대해 블로그에 올렸습니다.

DA와 통신하는 WSA를 갖는 것은 스토어 앱 인증 요구 사항에 의해 명시 적으로 금지 되어 있습니다.

Windows 스토어 앱은 파일 및 레지스트리 키를 포함하여 로컬 메커니즘을 통해 로컬 데스크톱 애플리케이션 또는 서비스와 통신해서는 안됩니다.

... 그러나 "로컬 메커니즘"만 제한합니다. 따라서 통신 라우팅을위한 웹 서비스를 구축 할 수 있다고 생각합니다.


3

추가 수동 cmd 작업을 수행 할 수 있다고 생각되면 다음을 시도해 볼 수 있습니다.

X:/> CheckNetIsolation.exe LoopbackExempt a n=<packageID>;

CheckNetIsolation.exe는 winRT 설치에 포함되어 있으므로 추가로 설치할 필요가 없습니다.

나는 그것을 시도했다 : 그것은 패키지 업데이트 후에도 작동합니다.

http://msdn.microsoft.com/en-us/library/windows/apps/Hh780593.aspx에 표시된대로

다음은 앱의 packageID를 찾는 방법을 설명합니다. http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/82bad7d4-d52b-4731-a396-13ab9004c1cc/how-to-get- 지하철 스타일 앱의 앱


내부 응용 프로그램을 위해 localhost와 통신 할 수 있기를 원했고이 명령을 사용하여 VS를 실행하지 않는 컴퓨터에서만 발생할 수있었습니다.
adosaiguas

2

로컬 서비스를 사용하여 Metro 앱에서 데스크톱 앱으로 동일한 컴퓨터에서 통신 할 수 있습니다. 얼마 전에 로컬 서비스를 사용하여 WinRT 샌드 박스를 우회하는 방법 인 간단한 "개념 증명"을 구현했습니다. 서비스를 설치하려면 여전히 일종의 "사회 공학"또는 직접 가이드가 필요하지만 어쨌든 가능합니다.
Windows Store에 이러한 앱을 추가 할 때 "로컬 서비스"통신에 대한 인증 규칙에 대해 잘 모르겠습니다.

여기 샘플

설계 상 Metro 애플리케이션은 WinRT API 및 사용 가능한 기능 만 사용하여 기본 PC에 직접 액세스 할 수 없습니다. 그러나 PC 및 모든 데이터에 액세스하기위한 백엔드 서비스를 만들면 기본적으로 더 이상 샌드 박스에서 실행되지 않습니다.

유일한 "문제"는 사용자가이 백엔드 서비스를 수동으로 설치해야한다는 것입니다. 그러나 일부 "소셜 엔지니어링"을 사용하면 문제가되지 않습니다. 사용자가 "PC 브라우저"Metro 앱을 다운로드하면 사용자가 모든 사진, 음악 및 비디오를 탐색 할 수 있습니다. , WinRT API를 사용하지만 앱은 하단에 "PC 브라우저 파워팩을 다운로드하고 PC 전체를 무료로 검색"하는 메시지도 표시합니다.

사용자는 전체 PC의 파일에 액세스하기위한 "PC 브라우저"백엔드 서비스가 포함 된 클래식 데스크탑 설치 프로그램을 다운로드 할 수있는 웹 페이지로 리디렉션됩니다. 이 데스크톱 서비스가 설치되면 Metro 앱이이를 감지하여 전체 PC를 탐색하는 데 사용할 수 있습니다. 사용자는 만족하지만 WinRT 샌드 박스가 손상되었습니다.

물론 이것은 Windows 8 ARM 태블릿에서는 작동하지 않습니다. 이 해결 방법을 사용하면 바이러스 백신, 토렌트 / P2P 클라이언트 등과 같은 클래식 데스크톱 앱용 Metro 앱 클라이언트를 구축 할 수도 있습니다.


3
왜 사회 공학에 대해 언급해야하는지 잘 모르겠습니다. 원래 질문은 메트로 앱과 대화하는 데스크톱 앱 / 서비스에 관한 것이기 때문에 사용자가 데스크톱 앱 / 서비스를 별도로 설치해야 할 것으로 예상됩니다. 그렇다면 데스크톱 서비스와 메트로 앱간에 어떤 통신 방법을 사용 했습니까?
dodgy_coder

0

요점을 놓쳤을 수도 있지만 사설 네트워크 기능을 활성화 할 때 로컬 IP 주소 (localhost 아님)를 사용하여 로컬 실행 (http) 서버에 연결할 수 있습니다. 이를 통해 winrt 앱이 wpf 데스크톱 앱과 통신하는 시나리오를 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.