Dans une situation où l'interface de l'interface utilisateur est construite à l'aide du nouveau style d'applications Metro pour Windows 8 et que vous souhaitez qu'elle communique avec une application .NET exécutée sur le bureau sur la même machine locale (par exemple, une application de service Windows).
Quelles formes de communication interprocessus sont disponibles entre l'application Metro et l'application de bureau?
Merci à Pavel Minaev de l'équipe Visual Studio, qui a fourni quelques informations initiales ici dans un commentaire, cité:
Selon Martyn Lovell, il n'y a aucun mécanisme délibéré pour cela, et certains qui pourraient être utilisés pour cela sont intentionnellement restreints. Les canaux nommés ne sont pas là, par exemple, ni les fichiers mappés en mémoire. Il existe des sockets (y compris des sockets serveur), mais lors de la connexion à localhost, vous ne pouvez vous connecter qu'à la même application. Vous pouvez utiliser des fichiers normaux dans l'un des "dossiers connus" partagés (Documents, Images, etc.), mais c'est un hack assez grossier qui nécessite une interrogation et qui est visible par l'utilisateur. - Pavel Minaev commentant cette question
Donc, à défaut d'approches normales, je pensais utiliser des services Web ou lire / écrire dans une base de données afin d'obtenir une certaine forme de communication, ce qui semble excessif lorsque les processus s'exécutent sur la même machine.
Ce que je tente ici a-t-il un sens? Je peux voir la nécessité pour une application de métro d'être l'interface utilisateur frontale d'un service existant qui s'exécute sur le bureau. Ou est-il préférable d'utiliser simplement WPF pour l'interface utilisateur frontale exécutée sur le bureau (c'est-à-dire une application non métropolitaine).
Réponses:
Je porte mon projet existant sur Win8 en ce moment. Il se compose d'un service Windows et d'une application de plateau qui se parlent via NamedPipes WCF. Comme vous le savez peut-être déjà, Metro ne prend pas en charge les tuyaux nommés. J'ai fini par utiliser TcpBinding pour une connexion full duplex.
Cet article décrit les fonctionnalités prises en charge.
Un exemple de mon serveur WCF que le client Metro peut consommer est ici .
Gardez également à l'esprit que vous ne pouvez pas utiliser WCF synchrone dans Metro. Vous devrez utiliser un wrapper basé sur les tâches qui est uniquement asynchrone.
Et merci pour votre question. J'étais un bon point de départ pour moi :)
la source
Il y avait un certain nombre de questions comme celle-ci à la fin d'une // build / session à laquelle j'ai assisté. Aleš Holeček, l'exécutif qui a fait l'une des grandes séances photo, est sorti du public pour les gérer. Même si vous n'êtes pas un développeur C ++, téléchargez cette session et regardez les questions et réponses http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C
Les applications Metro ne peuvent pas compter sur les applications de bureau ou les services installés sur la machine. Et les applications de bureau ne peuvent pas compter sur les applications Metro en cours d'exécution puisqu'elles peuvent être suspendues à tout moment. Vous devez commencer à penser différemment. Écoutez Aleš sur celui-ci.
la source
localhost
directement via un socket TCP, pourquoi vous permettrait-il de faire de même via WCF?Notez qu'avec la mise à jour de Windows 8.1, la communication entre les applications du Windows Store et les composants de bureau écrits en C # pour .NET 4.5+ est désormais officiellement prise en charge pour les applications à chargement latéral dans les scénarios d'entreprise:
Composants Windows Runtime négociés pour les applications Windows Store à chargement latéral
Citer:
Bien que la mise en œuvre de cette approche soit un peu compliquée au départ, elle permet une intégration profonde entre le Windows Store et les composants de bureau. Gardez simplement à l'esprit que pour le moment, il ne passera pas la certification publique du Windows Store.
la source
Il existe un article sur InfoQ sur la façon de créer des applications Metro faiblement couplées avec des gestionnaires de protocole. C'est quelque chose qui est pris en charge par Windows depuis longtemps et on pourrait prévoir qu'une application de bureau s'enregistre elle-même en tant que gestionnaire de protocole et peut-être que l'application de métro peut communiquer via ce mécanisme.
Je ne sais pas si cela est possible, mais il pourrait être intéressant de vérifier.
la source
Christophe Nasarre a écrit sur un blog sur une façon plutôt hacky de le faire en utilisant des fichiers locaux. Le résultat est une communication entre l'application de bureau / l'application Windows Store (appelée DA / WSA dans le blog), sans avoir à basculer entre l'interface utilisateur des deux applications. Il a également blogué sur une autre technique moins piratée impliquant des gestionnaires de protocole.
Notez que le fait d'avoir un WSA qui communique avec un DA est explicitement interdit par les exigences de certification de l'App Store
... mais il ne restreint que les "mécanismes locaux". Je suppose donc que l'on peut créer un service Web pour acheminer les communications.
la source
Si vous pensez que vous pouvez effectuer une opération cmd manuelle supplémentaire, vous pouvez essayer:
CheckNetIsolation.exe est inclus dans l'installation de winRT, il n'y a donc rien de plus à installer.
Je l'ai essayé: cela fonctionne, même après la mise à jour du package.
Comme indiqué 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- le-appid-of-a-metro-style-app-
la source
Il est possible de communiquer sur la même machine depuis l'application Metro vers l'application de bureau en utilisant le service local. J'ai implémenté il y a quelque temps une simple «preuve de concept», comment contourner le bac à sable WinRT en utilisant le service local. Il a encore besoin d'une sorte d '«ingénierie sociale» ou d'un guide direct pour installer le service, mais de toute façon, c'est possible.
Je ne suis pas sûr des règles de certification concernant la communication «service local» lors de l'ajout d'une telle application au Windows Store.
Échantillon ici
la source
Peut-être ai-je manqué le point, mais lors de l'activation de la capacité Réseaux privés, je peux me connecter à un serveur local (http) en utilisant l'adresse IP locale (pas localhost). Cela active mon scénario où une application winrt communique avec une application de bureau wpf
la source