8
votes

Un service Web .NET est-il instancier avec chaque appel de méthode?

J'essaie des services Web pour une idée que j'ai eue. En cours d'exécution dans le débogage, il ressemble aux instanciats de la classe de service Web chaque fois qu'un client appelle une méthode dans le service Web. Je peux voir cela en voyant que le constructeur est appelé chaque fois que j'appelle une méthode. J'instaine uniquement le service Web proxy une fois dans le client.

Cela signifierait que je devrais stocker toutes les données entre les appels et signifie que si j'utilise une base de données, je devrai vous connecter à chaque appel à une méthode.

qui ne peut pas être correct?


5 commentaires

Pourquoi? C'est ainsi que les pages Web fonctionnent et un service Web n'est vraiment qu'une page Web avec une fonction alternative.


Oh bien. Comme une page Web. Embêter! Je vais essayer l'idée de wcf merci


Spencer Ruport: Si vous n'avez pas traité des pages Web ni d'autres cadres apatrides auparavant, cela semblera étrange au début. Après tout, dans des cadres d'état, vous n'aurez pas à faire tout ce travail supplémentaire plusieurs fois.


Même si vous allez chercher WCF, vous devriez vraiment faire de votre mieux pour éviter l'état. N'oubliez pas que dans un système distribué, vous devez vous attendre à une machine à déconnecter ou à redémarrer à tout moment. Si le serveur maintient l'état, il devient un point faible. Outre la stabilité, cela affecte également l'évolutivité, car les grappes devraient partager cet État.


Je pense à un service qui fournit des informations (un numéro unique) à qui accède au service Web. Devoir refaire la connexion de la base de données pour chaque demande semble être une énorme générale. Puis-je venir autour de ça?


3 Réponses :


5
votes

C'est vraiment correct.

Les services Web (dans une architecture orientée service) sont destinés à être apatrides (ils ne se souviennent de rien entre les appels ... Toutes les données persistance sont à vous).

Si vous recherchez assez longtemps sur le Web, vous trouverez des tentatives de création de services Web stipuleux (qui ont leur place, mais vont contre les principaux principaux de la SOA). Vous y trouverez, cependant, qu'ils ne respectent pas vos préoccupations. Vous obtiendrez une nouvelle instanciation de classe avec chaque appel et toutes les connexions à la DB devront être recréées.


0 commentaires

2
votes

Oui, c'est 100% correct. Chaque fois qu'une demande est reçue par le serveur, un nouvel objet est instancié pour gérer la demande sur un thread séparé.

C'est la même chose qui se passe avec un formulaire Web ASP.NET de base.


0 commentaires

4
votes

pour asmx, c'est correct et en grande partie une bonne chose. Les services devraient être aussi apatriés que possible et si vous avez vraiment besoin de stocker quelque chose entre les appels, vous pouvez utiliser un singleton. Je ne pense pas que la connexion à une connexion de base de données soit qualifiée, car elles sont en cache et que vous souhaitez que votre utilisation soit utilisée, de toute façon.

Si vous voulez qu'un seul objet reste en vie entre les appels, WCF offre cette option. Étant donné que ASMX est obsolète, vous voudrez peut-être passer à WCF.


1 commentaires

Peut-être pas assez obsolète. "Legacy" est le mot utilise par MS.