3 votes

Comment puis-je retourner un objet qui peut être exécuté sur le serveur ?

Issu d'un background en Java, c'est ainsi que je pense :

Le serveur fournit un objet au client. Cet objet devrait être capable d'être exécuté sur le serveur.

Serveur :

private string _S = "A";

public interface IFoo { void Bar(); }

private class Foo : IFoo {
    void Bar() { _S = "B";}
}

public IFoo GetFoo() { return new Foo(); }

Client :

IFoo foo = serverChannel.GetFoo();
foo.Bar();

Remoting est obsolète (tout le monde renvoie vers WCF à la place) et WCF ne le prend pas en charge du tout fondamentalement (WCF : y a-t-il un moyen de retourner un objet capable d'être exécuté sur le serveur ?), donc comment devrais-je implémenter ce type de comportement ? L'utilisation de composants tiers est possible si nécessaire.

J'ai cherché sur SO mais n'ai trouvé aucune question similaire. Si cela a effectivement déjà été répondu auparavant, faites-le moi savoir et je supprimerai.

4voto

kyoryu Points 8281

Je recommande de ne pas essayer de "remote" les objets. C'est une idée dangereuse.

  1. Vous n'avez pas de contrôle local sur l'état distant. Vous ne l'avez jamais.
  2. Essayer de raisonner sur ce qui est l'état "vrai" et ce qui ne l'est pas devient très compliqué très rapidement.
  3. Penser en termes de messages aboutira probablement à une conception qui est plus "correcte" d'un point de vue réseau - c'est-à-dire une conception qui alloue correctement les responsabilités et ne fait pas d'hypothèses inappropriées.
  4. Une application réseau basée sur les messages sera presque certainement plus robuste.
  5. Une application basée sur le "remoting" permettra généralement un développement initial plus rapide, mais entraînera une tonne de temps supplémentaire à long terme pour gérer les conditions limites, etc.

Vraiment, ne le faites pas. Les objets distants sont tout simplement mauvais. À un niveau fondamental, le réseau consiste à transmettre des données. Faire fonctionner votre programme avec le même modèle rendra votre vie beaucoup, beaucoup plus facile à long terme.

3voto

Tim Mahy Points 889

WCF est en effet basé sur les messages, le Remoting fonctionne toujours.... la vraie question est : pourquoi ne voulez-vous pas travailler de manière basée sur les messages?

2voto

Andras Vass Points 8021

Si vous voulez partager le type dans WCF - comme ce que vous avez décrit et ce qui se passait en communication à distance, en partageant les déclarations (interface) dans des assemblages communs sur le serveur et le client - vous pouvez le faire en utilisant le NetDataContractSerializer. Cela a également aidé d'autres personnes.

Son utilisation est déconseillée - tout comme la communication à distance -, les messages basés sur les contrats semblent être très en vogue en ce moment.

Je devrais ajouter qu'avec une conception appropriée, vous finirez quand même par avoir une application basée sur le contrat/le message même avec .Net Remoting. Vos interfaces partagées deviendront les contrats d'opération, tandis que les définitions de classe de données partagées décriront les contrats/messages de données que vous transmettez.

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