Question

Je déployé une application Web ASP.NET nuit dernière et je quand je me suis réveillé ce matin, il était très lent et parfois simplement jeter serait une erreur « Service non disponible ».

J'ai vérifié l'Observateur d'événements et il a été rempli avec ces erreurs:

  

Une exception non gérée est survenue et le processus a été interrompu.

     

Exception: System.Runtime.Serialization.SerializationException

     

Message: Impossible de trouver l'assembly 'MonoTorrent, Version = 0.80.0.0, Culture = neutral, PublicKeyToken = null'

Je suis perplexe car il fonctionnait parfaitement quand je déploiement à l'échelle (MonoTorrent est nécessaire pour récupérer le nombre de semoirs / leechers pour un certain torrent hors tracker - ce fonctionnait très bien), mais il n'y a pas de travail plus et chaque fois que le code qui utilise MonoTorrent s'implique, le processus de travail tombe en panne juste.

MonoTorrent.dll est dans le répertoire / bin /.


Mise à jour 04/06/10: Je compilé le code source MonoTorrent avec le reste de mon application Web, mais il se bloque toujours à chaque fois qu'il utilise MonoTorrent. Cependant, il dit maintenant qu'il est Unable to find assembly 'OpenPeer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. Ici, OpenPeer est le nom de l'assemblée de l'application Web.

Pas de solution correcte

Autres conseils

Cela peut se produire dans les circonstances suivantes:

L'application ASP.NET crée un thread d'arrière-plan, ce qui déclenche une exception non interceptée. Il ressemble à l'exception attire ASP.NET et souhaite se connecter au journal des événements. Pour ce faire, il envoie cette exception dans le domaine de l'application de l'application de Web à son propre domaine d'application (par défaut un des processus w3wp). Cela a besoin d'une sérialisation / désérialisation de l'exception.

Si l'exception est une personnalisée (définie par l'application Web), il ne peut pas être désérialisé dans le domaine de l'application principale de ASP.NET, car l'ensemble définissant l'exception est généralement dans le répertoire bin de l'application Web, pas où w3wp exe est (C: \ windows \ system32 \ inetsrv). Cela provoque une exception sérialisation et accidents w3wp.

Il existe des moyens possibles pour résoudre le problème (dans un - très subjectif - ordre de préférence):

  1. Copier la DLL manquante dans c: \ windows \ system32 \ inetsrv
  2. Installez la DLL manquante dans le GAC
  3. Retirez la cause de l'exception (plus difficile à faire que de dire, comme on dit en français)
  4. Catch toutes les exceptions de l'arrière-plan vous-même le fil et faire vous-même vous connecter.

Notes:

  • Si WCF est utilisé et l'exception uncaught est FaultException, WCF avale et il n'y a pas de crash
  • Si l'exception uncaught est dans le fil de la demande Web, il y a un écran jaune de la mort, pas cette exception sérialisation
  • Il semble vraiment comme un bogue dans ASP.NET
  • Ce qui précède est en fait un résumé de mes enquêtes sur cette question hier et sont seulement une théorie. Je l'ai testé fixe 1 et 4, ainsi que l'utilisation FaultException.

effacement des fichiers temporaires ASP.NET . Il a résolu quelques problèmes bizarres avant pour moi.

Sinon, Fusion diagraphie peut jeter un peu de lumière.

MISE À JOUR: @Charlie - Je ne sais pas quoi faire de ces journaux ... il semble que le journal a échoué est d'un autre AppDomain. Notez que le AppBase est réglé sur "file: /// c: / windows / system32 / inetsrv /" et AppName est w3wp.exe.

Je suis assez sûr que l'Observateur d'événements devrait afficher Id Application: LM / W3SVC / # / ROOT si elle était le AppDomain par défaut, aussi. À ce stade, tout ce que j'ai est au hasard des suppositions.

  1. Je remarque que vous êtes en cours d'exécution x64 ... ne peut-être MonoTorrent x86 nécessitent
  2. Avez-vous vérifié une deuxième fois que le répertoire est une application IIS et est configuré pour la version correcte de ASP.NET?
  3. Y at-il une autre application qui utilise MonoTorrent sur ce serveur? Peut-être un service WCF ou quelque chose? Je ne sais pas où la sérialisation se passe ....
  4. Essayez accrocher le événement AssemblyResolve et le chargement manuellement.
  5. Pouvez-vous repro sur une machine de développement? Sinon, peut-être que c'est un FX installer complètement foireuse. Désinstaller et réinstaller.
  6. Est-ce que le redémarrage, le recyclage ou l'arrêt / démarrage du AppPool fixer le problème temporairement, ou faire de la question apparaisse?

Vous pouvez taper votre texte trop capture d'écran de sorte que vous aurez un peu d'amour Google ....

Voici quelques choses que vous pouvez essayer ..

1.) Répertoire Flush ASP.Net Temp . Redémarrer les services Internet et recyclage pool d'applications .

2.) Assurez-vous que votre application web est en cours d'exécution si elle a vraiment besoin de FULL-TRUST FULL-TRUST.

3.) Prenez l'Assemblée, essayez de l'utiliser dans une autre application de asp.net et exécuter l'application de test sur un serveur séparé . Cela pourrait vous aider à diagnostiquer le problème. Essayez également de lancer l'application asp.net de test sur le même serveur, mais dans la piscine séparée de l'application.

4.) Assurez-vous que site web IIS de votre application est en cours d'exécution sous le compte utilisateur avec priviliges de sécurité nécessaires . Essayez d'exécuter l'application sous Administratotr en tant qu'utilisateur.

EDIT-1

5.) Vérifier également si la version d'assemblage est le même que mentionné dans web.config. S'il y a une incompatibilité de version, vous pouvez alors faire assemblyBinding Redirection dans web.config.

6.) Essayez aussi registaering l'Assemblée GAC et voir si elle se charge correctement.

EDIT-2

7.) Essayez reconfigring support ASP.NET sur le serveur ou re-configuration peut peut-être aider l'exécution-cadre. Cela peut ne pas être une solution sure shot mais en regardant l'état de problème nous pouvons essayer différentes solutions.

8.) Assurez-vous de ne pas manquer une mise à jour critique de Windows serveur plate-forme.

J'essaie de vous donner quelques idées - ce que je fais si je suis votre position

.

Tout d'abord je prends un long regard de la MonoTorrent.dll avant quelques jours que vous faites votre question, et je suis encore aujourd'hui. J'ai trouvé et la fonction qui charge la dll. Ma première opinion est que quelque chose a à voir avec les droits d'accès.

J'espère que vous avez accès au serveur - droit

Mes premiers pas est que:

Assurez-vous que votre monotorrent.dll Actuall ont les permissions dans le répertoire bin , pour lire et exécuter votre application asp.net. Quelques fois la copie d'une dll, n'a pas obtenu les autorisations de répertoire de mais ses propres chariot autorisations. Pour vérifier si votre dll ont des autorisations différentes du reste, juste un clic droit et voir Propriétés | Sécurité, puis allez dans le répertoire bin et faire la même chose, et comparer les autorisations de sécurité. Si elles sont différentes puis appliquer à nouveau les autorisations d'annuaire et assurez-vous que la dll héritée par le répertoire.

Ma deuxième étape

Télécharger le ProcessMonitor de Sysinternals

http://technet.microsoft.com/en-us/sysinternals /bb896645.aspx

Exécuter ProcessMonitor et essayer de recréer l'erreur , arrêter et d'analyser pour voir où et pourquoi la dll obtient les autorisations pour exécuter niés. Avec ProcessMonitor vous pouvez même voir s'il y a une dll qui ne peut pas trouvé!

Je vérifier les dll MonoTorrent et je ne trouve rien d'inhabituel. Il a appels kerner32.dll, et utiliser le code dangereux pour courir, rien ok si spécial.

Donc, si vous le faites 2 pas et me donner quelques commentaires, je peux peut-être aller plus loin. (Sinon à résoudre par vous et ce que vous trouvez)

Je vous conseille d'installer maintanence régulier probablement une fois par semaine au etc dimanche soir pour suivre,

  1. Supprimer tous les fichiers temporaires
  2. Tout supprimer ASP.NET IIS fichiers temporaires
  3. Redémarrer serveur

Le problème est, des applications Web ASP.NET causent beaucoup de fichiers temporaires à gauche dans le disque, en raison de la compilation dynamique des expressions rationnelles, des ensembles de seriliazation etc, comme substance temporaire n'est supprimé, et de plus en plus indésirable commence à être collectés dans emplacements temporaires, ASP.NET va plus lent et plus lent, et un point où vient dans le disque, ainsi que la mémoire atteint défragmentation très haut point, les choses commencent à échouer.

Aucun corps aime redémarrer le serveur une fois par semaine, mais je me souviens que nous avions pas le choix dans ASP.NET 1.1 nous avons eu système stable après le redémarrage de tous les jours, dans ASP.NET 2.0 partir, nous sommes bien d'avoir prévu au redémarrage de une fois par semaine.

J'ai trouvé ce problème et je dois faire tout chose que je peux, comme fichier temporaire clair, serveur de redémarrage, supprimer et ajouter une référence et je reconstruire aussi la solution. Cependant, je ne peux pas résoudre ce problème. Enfin, je déplace ma classe d'entité (presque d'entre eux ont besoin de sérialisation) dans un nouveau dossier que j'ai ajouté au projet et ce problème résolu.

Cette méthode est un travail pour moi.

est le fuseau horaire du serveur différent de votre fuseau horaire? J'ai eu ce problème lors du déploiement de fichiers de ressources, le temps était la compilation à l'avenir afin qu'ils ne parviennent pas à charger.

Je pense que vous avez beaucoup de connexions ouvertes mais pas fermées. Je veux dire les connexions ne sont pas retournés à la piscine. Il a l'air bien, lorsque vous démarrez l'application, mais après un certain temps il n'y a que plusieurs sockets disponibles dans la piscine et il va lentement. Une autre chose - connexion non fermée peut garder DLL en mémoire, ne permettant pas de libérer le gestionnaire. Essayez de destruction d'objets de débogage.

Je sais qu'il est simple mais j'ai eu ce problème une fois itwas parce que j'avais un projet d'application Web qui contient

    References

Dossier et je viens de copier mes fichiers dans un

    Bin

dossier, dans une application Web .NET dans les fenêtre Propriétés du projet , Référence onglet Path est disponible qui, par défaut devrait être rien inclure là-dessus. cochez cette option et aussi Construire onglet fenêtre Propriétés du projet qui Chemin de sortie aussi les mêmes que bin \

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top