2008-11-13 7 views
2

Situation hypothétique: disons que j'ai un assemblage .net tiers utilisé dans le système web ASP.Net sur lequel je travaille qui se bloque de temps en temps. Quand c'est le cas, tous les appels lancent des exceptions jusqu'à ce que le système soit redémarré. C'est, évidemment, un peu sous-optimal.Existe-t-il un moyen de "redémarrer" un assembly .net?

Existe-t-il un moyen de redémarrer uniquement cet assembly à partir du gestionnaire d'exceptions?

(Addenda: bien sûr, la bonne réponse est de demander au vendeur de corriger son bogue, mais le fournisseur en question est un peu ... réticent à répondre à nos emails. est arrivé ce matin sous la forme d'un morceau de ruban adhésif de type MacGyver-eqsue, puis nous avons réalisé qu'aucun d'entre nous ne savait comment le faire.)

+0

Certes, ce fournisseur n'est pas le seul fournisseur qui fournit ce type de composant. Peut-être pourriez-vous trouver un autre produit mieux supporté? –

Répondre

7

appel HttpRuntime.UnloadAppDomain() forcera l'application de se terminer et redémarrer lorsque la demande Web suivante arrive. Cela entraîne que tout soit rechargé à partir de zéro et devrait éliminer les données d'assemblage corrompues.

Accordé, ce qui tuera toutes les sessions actives, mais si la demande est essentiellement écrasé de toute façon c'est probablement acceptable.

+0

+1 car c'est WAAAAY meilleur que ma solution. Je ne savais pas que cela existait. J'espère juste que je n'en ai jamais besoin. :) – BoltBait

2

Hypothétiquement ... revenez à votre fournisseur tiers et faites-leur réparer leur punaise.

+0

Ceci est, bien sûr, la bonne réponse. C'est notre tentative de gifler du ruban adhésif sur le problème pendant que nous essayons de convaincre le vendeur que c'est vraiment leur problème. –

+0

Avez-vous envisagé la possibilité que vous n'utilisiez pas correctement l'assembly tiers? Peut-être que vous ne libérez pas une ressource, une mémoire, ou une connexion SQL après utilisation ... Je serais, sérieusement, vérifier là avant de faire quoi que ce soit drastique. – BoltBait

+0

La réponse courte est oui, nous avons considéré cela un peu. C'est une vieille DLL COM avec un (pauvre) .net agrafé, et la chose fuit la mémoire partout. Nous sommes à peu près sûrs que nous avons résolu tous les problèmes de ressources que nous pouvons résoudre à ce stade, et cela fonctionne * mieux *, mais pas * correctement. * –

4

vous pouvez recycler le pool d'applications, mais cela coup d'envoi tous les utilisateurs actuels et de perdre leurs informations de session - qui ne peut pas d'importance si le site est lavé au jet déjà par le mauvais dll de toute façon

+0

Cela vaut mieux que modifier web.config par programme, dans mon esprit. –

4

OK, vraie réponse .. Lorsque le fichier Web.Config est modifié, l'application est recompilée et le pool d'applications est réinitialisé.

Alors, (et je déteste dire cela) changer votre programme fichier web.config.

BTW, je ne recommande pas le faire, vous pouvez enregistrer votre vote vers le bas pour quelqu'un d'autre.

+0

+1 pour vivre sur le bord. – MusiGenesis

+0

Toutes les choses sont excusables quand il s'agit de trucs de tiers de merde. La véritable erreur a été de choisir de l'utiliser en premier lieu - une fois cette erreur faite, vous faites ce que vous avez à faire. – MusiGenesis

+0

Des situations drastiques exigent des mesures drastiques! – BoltBait

0

Il se peut que quand il plante bizarrement, il laisse encore un processus actif vivant que les tuyaux toute tentative ultérieure d'appeler la DLL. Si c'est le cas, vous pourrez peut-être le trouver par programme et le tuer, ce qui pourrait résoudre le problème qui nécessitait un redémarrage.

0

En plus de modifier le web.config que vous pouvez créer un fichier arbitraire dans votre dossier bin. Cela redémarrerait votre application.

Questions connexes