2011-10-25 1 views
1

J'ai une application C# (qui est le client) et j'ai un serveur. Maintenant, le serveur obtient et envoie toutes sortes de messages qui sont des chaînes au client, j'utilise StreamWriter pour cela, maintenant le message d'envoi sur le client et le serveur semble assez le même, je prends la chaîne l'encoder en UTF-8 et puis de l'envoyerQuelle est la meilleure façon (largement acceptée) d'envoyer des données (messages) au serveur

public void SendMessage(String p) 
{ 
    if (p != "") 
    { 
     string StringMessage = HttpUtility.UrlEncode(p, System.Text.Encoding.UTF8); 

     try 
     { 
      swSender.WriteLine(StringMessage); 
      swSender.Flush(); 
     } 
     catch (IOException e) 
     { 
      //do some stuff 
     } 
    } 
} 

maintenant, les chaînes que j'envoie est quelque chose comme ceci:

"[email protected]@@@SOMEDATA1<><>SOMEDATA2<><>SOMEDATA3 

cela provoque des problèmes, et me fait penser. Est-ce ainsi que les grandes applications envoient/reçoivent des données? Parce que ça a l'air assez idiot. Si non, alors quelqu'un peut-il donner un exemple sur la façon dont les grandes applications envoient des messages?

aussi: ma façon d'envoyer des messages me fait faire de gros imbriquée si

Par exemple:

if(Subject="something") 
    do something 
else if(subject="something else") 
    do something else 

Comment puis-je résoudre ce problème?

+1

Envoie des données auto-descriptives. Xml. La pierre angulaire de Soap et d'autres protocoles d'interopérabilité. Considérez WCF. –

+0

que voulez-vous dire par des données auto-descriptives? pouvez-vous poster un exmaple? –

Répondre

3

Tout dépend en grande partie des besoins de votre application.
D'une manière générale: non, inventer votre propre protocole n'est pas une bonne idée.

Il existe plusieurs façons d'envoyer des messages du client au serveur.
Je vous suggère de faire quelques lectures sur WCF, ou si vous êtes en .NET 2.0 que .NET Remoting.
En outre, vous pouvez envisager d'envoyer des messages HTTP, car il y a un shitload de cadres pour le faire.

+2

si l'interopérabilité est également une de vos exigences, le service WCF Rest est votre ami –

+0

En utilisant le modèle mvc, le modèle doit-il être connecté au client WCF qui reçoit des données du serveur? ou le client WCF devrait-il agir comme le modèle lui-même? –

+0

Le modèle n'est ni client, ni rien ne s'y connecte.Le modèle est simplement la définition de vos objets métier. Vous devriez créer à la fois le client et le serveur qui passerait les objets Model entre eux – Svarog

0

essayer d'utiliser la méthode HttpUtility.HtmlEncode

au lieu UrlEncode()

+1

Comment cela va m'aider à résoudre mon problème, je ne parle pas de l'encodage du tout, peu importe comment je code, ce qui importe est que je ne suis pas sûr que j'ai besoin d'envoyer des données de cette façon –

+0

ne comprends pas correctement votre question. – Serghei

1

Une façon consiste à utiliser XML-RPC. J'ai utilisé this for .NET. J'ai suivi les instructions sans le modifier et j'ai obtenu que le client/serveur travaille dans les 30 minutes et 10 autres pour le modifier à mon goût. Essentiellement, vous appelez des fonctions normalement et, grâce à la magie de la bibliothèque, il bloquera l'exécution du code par le serveur et les résultats seront renvoyés. RPC = appel de procédure à distance.

Si vous utilisez asp.net utilisez les instructions étiquetées IIS même si votre sur linux utilise fastcgi ou apache. J'ai ignoré ce qui était une erreur parce qu'il était étiqueté IIS. Il y a une option .NET Remoting (si le serveur n'est pas asp.net mais une autre application) est disponible.

Une option moins bonne consiste à apprendre les chaînes webclient et post-json sur le serveur. Ensuite, lisez la réponse en json. XML-RPC est assez standard et suggéré.

+0

Peut-être que je me trompe, mais je ne pense pas que ce soit une bonne chose de faire des appels sur le serveur depuis le client sans flitering ... il. –

+0

@BlueGene: Généralement, vous avez des fonctions d'authentification (ou un paramètre pour une clé longue api) pour tout ce qui nécessite une connexion/authentification de l'utilisateur. OAuth est une méthode populaire. Les appels de télécommandes que j'ai fait jusqu'ici n'ont jamais exigé l'authentification mais le cryptage sage vous pouvez jeter l'url derrière https et vous ne devrez pas s'inquiéter de renifler/homme dans l'attaque moyenne. Toutefois, si vous utilisez .NET et un certificat auto-signé .NET se plaindre et vous devez désactiver quelque chose. Pour cela, recherchez ServicePointManager.ServerCertificateValidationCallback et affectez-lui une fonction qui renvoie toujours la valeur true. –

Questions connexes