2009-11-26 16 views
12

J'ai deux applications C# et je veux que l'une d'entre elles envoie deux entiers à l'autre (cela ne doit pas être rapide puisqu'elle n'est invoquée qu'une fois toutes les quelques secondes).Quelle est la manière la plus simple de faire une communication inter-processus en C#?

Quelle est la manière la plus facile de faire cela? (Il ne doit pas être le plus élégant.)

+0

Près de doublons: http://stackoverflow.com/questions/232332 et http://stackoverflow.com/questions/833376 –

Répondre

0

Je dirais les faire parler sur une prise.

Avoir un programme listen sur un socket et avoir l'autre connect au premier. Envoie les deux entiers sur une seule ligne, comme des chaînes de chiffres. La seule question est de savoir comment ils devraient être d'accord sur les numéros de port, et comment ils savent qu'ils parlent entre eux. Ils peuvent se mettre d'accord sur les numéros de port en décidant qu'ils devraient toujours utiliser le port 12345 (disons), et la solution sale-hacky pour la deuxième partie est de simplement faire confiance à qui que ce soit pour être un bon gars.

+0

En fait, autant que je me souvienne, vous pouvez spécifier à partir de quelles adresses pour accepter les connexions (ou à moins vérifier de quelle adresse il s'agit, et si ce n'est pas localhost ... eh bien, ne jamais parler à des étrangers;)). – Bobby

0

Une autre façon serait d'imiter un tuyau nommé. Déclarez un fichier quelque part et lisez/écrivez dessus. Ou, si les programmes sont exécutés en séquence, vous pouvez essayer le presse-papier ... mais cette solution est laide et est boguée (parfois .NET ne peut pas accéder au presse-papiers sans raison).

+1

Je suis fortement en désaccord avec la partie presse-papiers. Et je ne vois aucun intérêt à * imiter * un tuyau nommé, quand vous pouvez simplement utiliser des tuyaux nommés réels? – Groo

0

Mutex peut être une option; veuillez lire ceci: Inter-Process Data Exchange using .NET 2.0

Pour être complet, vous pouvez également utiliser net.pipe et WCF.

+0

Les mutex sont utilisés pour la synchronisation, pas pour le transfert de données. – Groo

+0

enlevé que Groo, ty –

15

La manière la plus simple et la plus fiable est presque certainement IpcChannel (par exemple, canal de communication inter-processus); c'est pour ça que c'est là. Vous pouvez le faire fonctionner avec quelques lignes de code et de configuration.

+1

Très simple; facile, etc ... De loin le plus facile de ce que je vois. – DaBlue

5

Vous pouvez essayer .NET Remoting. Voici un exemple simple: CodeProject .NET Remoting.

Si vous utilisez .NET 3.5, vous devriez opter pour WCF, car Remoting devient lentement obsolète. Encore une fois, il y a beaucoup de examples for WCF autour.

2

J'ai créé ma propre bibliothèque open source pour IPC rapide et facile qui fonctionne entre les services Windows, les applications console et les formulaires Windows.

Il présente certains avantages par rapport aux implémentations IPC existantes et ne nécessite aucune configuration.

Voir here.