2016-06-27 1 views
5

Avec .NET 4.5, j'ai créé une application Web extensible. Avec exécute au code certifié d'exécution de tiers. Pour cela, j'utilise les domaines d'application et la communication inter-processus.Meilleure pratique Comment isoler du code/des assemblages dynamiques avec .net CORE

Maintenant, je vis que beaucoup de technologies que j'ai utilisé pour ce ne sont plus pris en charge dans le noyau .NET

comme:

  • AppDomains
  • Remoting
  • BinarySerzializers

Pour la plupart d'entre eux, il existe des solutions évidentes. Mais la suppression de AppDomains est une chose difficile. Si je comprends bien, je devrais utiliser des processus. Mais si mon application a environ 100 extensions (plusieurs clients)? Cela signifierait que je devrais créer 100 processus (microservices) ou au moins en regrouper certains dans des microservices.

Mais je ne me sens pas très à l'aise avec l'un ou l'autre. Dans un sens, je finirais avec des centaines de processus. Et si je groupais, je pourrais encore avoir des influences entre eux.

Alors, quelle serait la bonne façon de choisir?

Répondre

2

Une solution possible peut être d'utiliser AssemblyLoadContext à la place de AppDomains. Ce n'est pas un remplacement direct pour AppDomains et le niveau d'isolation qui vous donne, mais il peut être assez bon pour vos besoins - il vous permet d'utiliser l'équivalent de AppDomain.LoadFile et AppDomain.ResolveEvent pour vous donner l'isolation de chargement d'ensemble.

Il n'y a pas de documentation réelle autour de ce pour le moment, mais il y a un problème pour faire tout cela ici: https://github.com/dotnet/coreclr/issues/5463

+0

pire un regard, mais comme vous l'avez dit est pas le même niveau d'isolement. Je me demande simplement si les gens du noyau de dotnet ignorent juste ces besoins ou si je surveille quelque chose ... –

+1

Il peut bien être quelque chose qui revient en tant que plus du cadre complet est ajouté à 'netstandard' - ils ne sont pas explicitement mentionnez «AppDomain» mais si vous ne l'avez pas déjà fait, cet article vaut le coup d'œil sous la forme d'une feuille de route vague: https://blogs.msdn.microsoft.com/dotnet/2016/05/27/making-it-easier-to -port-to-net-core/ – Sock

+0

Je veux juste souligner ce que @Sock a dit: 'AssemblyLoadContext' ne fournit pas une isolation parfaite. Il n'est pas difficile pour une assemblée "isolée" de modifier l'état privé dans d'autres assemblées par réflexion. Il semble que la séparation des processus soit le seul moyen infaillible d'empêcher cela. –