2011-04-10 3 views
1

Je développe actuellement un client Windows à l'aide de Windows Form Application en collectant certaines données à partir de la machine Windows. Je dois envoyer ces données au serveur. Mais je ne sais pas quelle est la meilleure façon de le faire. Je suis actuellement en train d'essayer WCF Web Service pour obtenir des données et retourner vrai ou faux. Mais j'ai besoin d'apprendre le moyen le plus rapide d'envoyer des données au serveur. Le client doit être fiable et rapide. Quelles sont mes options ou la meilleure façon de le faire. Le serveur renvoie uniquement les données comme vraies ou fausses.Meilleure façon de publier le client de données sur le serveur C#

Répondre

1

je prendrais un coup d'œil à RhinoServiceBus. C'est rapide et assez facile à mettre en œuvre. Si vous n'aimez pas ça, j'utiliserais aussi la WCF.

+0

Je pense que _RhinoServiceBus_ a besoin de _MSMQ_ et je ne peux pas installer _MSMQ_ avec _msi installer_. Connaissez-vous une bonne façon de le faire ou d'exécuter _RhinoServiceBus_ exécuter sans _MSMQ_ –

+0

Cela résout mon problème. Merci. –

2

Si j'avais une telle tâche, j'utiliserais aussi le service Web WCF.

La seule différence que je ferais: tapez void et throw exception en cas d'erreur.

1

Vous pouvez utiliser un protocole de transport réseau bas niveau basé sur des sockets comme TCP ou UDP, mais vous devez gérer vous-même la conversion et la sérialisation.

En C# vous pouvez utiliser les classes tcpclient et TcpListener et sérialiser vos objets avec une sorte de sérialiseur (BinaryFormatter dans cet exemple)

ServerCode:

... 
TcpListener listener = new TcpListener(8080); 
listener.Start(); 
using (TcpClient client = listener.AcceptTcpClient()) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 
    //Assuming the client is sending an integer 
    int arg = (int)formatter.Deserialize(client.GetStream()); 
    ... //Do something with arg 
    formatter.Serialize(result); //result is your boolean answer 
} 
... 

ClientCode:

... 
    using (TcpClient client = new TcpClient(ipaddress, 8080) //ipaddress is the ip address of the server 
    { 
    BinaryFormatter formatter = new BinaryFormatter(); 
    formatter.Serialize(client.GetStream(), 12) //12 is an example for the integer 
    bool result = formatter.Deserialize(client.GetStream()); 
    ... //do something with result 
    } 
    ... 

Mais comme vous pouvez le voir, le plus rapide (UDP peut-être plus rapide, mais ne garantit pas l'envoi des données) n'est pas le plus facile (et pas toujours le meilleur).

Donc, pour un projet de formulaires de fenêtres je voudrais utiliser une sorte de "ready-made" API RMI/RPC comme les services Web WCF ou ASP.Net

+0

Je dois savoir que les données sont envoyées et qu'un travail particulier est effectué. Je ne veux pas perdre de données. –

+0

UDP ne garantit pas la livraison. TCP ajoute cette fonctionnalité. –

Questions connexes