119 votes

Comment une application Metro de Windows 8 peut-elle communiquer avec une application de bureau principale sur le même ordinateur?

Dans une situation où vous avez l'INTERFACE frontend construit à l'aide de la nouvelle Metro style apps pour windows 8, et souhaitez communiquer avec un .NET application en cours d'exécution sur l'ordinateur de bureau sur la même machine (par exemple un service windows app).

Quelles sont les formes de communication interprocessus sont disponibles entre l'application de métro et de l'application de bureau?

Merci à Pavel Minaev de l'équipe Visual Studio, qui a fourni quelques infos ici dans un commentaire, cité:

Selon Martyn Lovell, il n'y a pas délibéré mécanisme pour que les, et certains qui pourraient être utilisés pour cela sont volontairement limité. Nommé les tuyaux ne sont pas là, par exemple, ni les fichiers mappés en mémoire. Il y a des prises de courant (y compris les sockets serveur), mais lors de la connexion à localhost, vous ne pouvez vous connecter à la même application. Vous pouvez utiliser la normale des fichiers dans l'un de partage "connu" dossiers (Documents, Images, etc), mais qui est assez brut hack qui nécessite d'interrogation et est visible pour l'utilisateur. -- Pavel Minaev commentant ce problème

Donc, à défaut normal approches que je pensais de l'aide de services web ou de lecture/écriture à une base de données afin d'obtenir une certaine forme de communication qui se passe, qui vous sembler un peu exagéré quand les processus sont en cours d'exécution sur la même machine.

Est ce que j'essaie ici de donner un sens? Je peux voir un besoin pour une application de métro à l'interface de l'INTERFACE utilisateur d'un service existant qui est en cours d'exécution sur le bureau. Ou est-il préférable d'utiliser WPF pour la gestion de l'interface de l'INTERFACE utilisateur en cours d'exécution sur le bureau (c'est à dire une non-application de métro).

54voto

ruslan Points 5754

Je suis le portage de mon projet existant pour Win8 droit maintenant. Il se compose de service windows et le plateau de l'application qui parlent les uns aux autres par l'intermédiaire de NamedPipes WCF. Comme vous le savez peut-être déjà Métro ne prend pas en charge les canaux nommés. J'ai fini par utiliser TcpBinding pour la connexion en duplex intégral.

Ce post décrit ce que la fonctionnalité est prise en charge.

Exemple de mon WCF serveur de Métro client peut consommer est ici.

Aussi garder à l'esprit que vous ne pouvez pas utiliser synchrone de la WCF dans le Métro. Vous aurez à utiliser une Tâchebasée sur wrapper qui n'est asynchrone.

Et je vous remercie pour votre question. J'étais un bon point de départ pour moi :)

38voto

Kate Gregory Points 13451

Il y avait un certain nombre de questions comme ça à la fin d'un //build/ session j'ai assisté. Aleš Holeček, le exec qui a fait une de la grande image sessions, sortit de l'audience pour les gérer. Même si vous n'êtes pas un développeur C++, le téléchargement de cette session et de regarder le Q & A. http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C

Applications Metro ne pouvez pas compter sur les applications de bureau ou des services en cours d'installation sur la machine. Et les applications de bureau ne pouvez pas compter sur de Métro applications en cours d'exécution, car ils peuvent être suspendus à tout moment. Vous devez commencer à penser différemment. Écouter Aleš sur celui-ci.

11voto

ig2r Points 1828

Prendre note qu'avec Windows 8.1 mise à Jour, de communication entre les applications du Windows Store et de bureau, les composants écrits en C#.NET 4.5+ est maintenant officiellement pris en charge pour les applications chargées dans des scénarios d'Entreprise:

Négocié des Composants Windows Runtime pour chargement de Windows Store apps

Pour citer:

Reconnaissant que les fonctions critiques de l'entreprise et les règles sont incorporées dans les logiciels existants actifs et que les entreprises ont une grande variété de scénarios pour lesquels la nouvelle application de style seront très productif, Windows 8.1 mise à Jour inclut une nouvelle fonctionnalité appelée Négocié des Composants Windows Runtime pour des applications téléchargées. Nous utilisons le terme de l'IPC (inter-process communication) pour décrire la capacité pour exécuter des logiciels de bureau actifs en un seul processus (composant de bureau), tout en interagissant avec ce code dans une application du Windows Store. C'est un modèle familier de l'entreprise les développeurs d'applications de base de données et d'applications utilisant les Services NT de Windows partageons une même multi-architecture de processus.

Bien que la mise en œuvre de cette approche est un peu compliqué côté d'abord, il permet l'intégration profonde à travers le Windows Store et les composants de bureau. Il suffit de garder à l'esprit que pour le moment, il ne passe pas public de Windows Magasin de certification.

5voto

tronda Points 1771

Il y a un article sur InfoQ sur la façon de construire un couplage lâche applications Metro avec les gestionnaires de protocole. C'est quelque chose qui a été pris en charge par Windows pour un temps long et l'on pourrait envisager une application de bureau s'inscrire en tant que gestionnaire de protocole et peut-être le métro application peut communiquer par le biais de ce mécanisme.

Je n'ai aucune idée si c'est possible, mais il pourrait être intéressant de vérifier.

3voto

fgalliat Points 21

Si vous pensez que vous pouvez faire un autre manuel cmd opération, vous pouvez essayer :

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

CheckNetIsolation.exe est inclus dans winRT installer, donc il n'y a rien de plus à être installé.

Je l'ai essayé: ça marche, même après package de mise à jour.

Comme illustré sur: http://msdn.microsoft.com/en-us/library/windows/apps/Hh780593.aspx

Ici, il est expliqué comment trouver le packageID pour votre application: http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/82bad7d4-d52b-4731-a396-13ab9004c1cc/how-to-get-the-appid-of-a-metro-style-app-

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X