2011-03-06 3 views
3

Dans mes pages ASPX, j'appelle un composant COM qui utilise STA. J'utilise donc aspcompat = paramètre vrai, mais je veux comprendre la logique. Qu'est-ce que ça fait exactement? Pour autant que je sache, en STA, il est supposé pour être appelé seulement par un thread. Donc, je devrais fournir la sécurité du fil moi-même.AspCompat en page ASPX

Si c'est vrai, où ne AspCompat paramètre fournir la sécurité de fil? Sur la page entière, ou juste le point où j'accède au composant STA?

+0

avez-vous obtenu la solution finale? réponse non marquée – Kiquenet

Répondre

1

Cette directive provoque ASP.NET pour fournir un accès aux objets ASP intrinsèques et modifie le pool de threads MTA.

Pour plus de détails checkout this

1

Ceci est une citation tirée; Pro .NET Performance

AsP.nET exécute des pages sur les threads MTA par défaut. Si vous appelez des objets sTA , ils sont soumis à un marshaling. Si vous appelez principalement des objets sTA , cela dégradera les performances. vous pouvez y remédier en marquant pages avec l'attribut ASPCOMPAT, comme suit:

<%@Page Language = "vb" AspCompat = "true" %> 

noter que les constructeurs de page exécute toujours dans un thread MTA, afin de reporter la création d'objets sta Page_Load et événements Page_Init.

1

Lorsque vous utilisez seul thread (STA) composants COM, tels que composants développés à l'aide de Visual Basic, à partir d'une page ASP.NET, vous doit inclure l'attribut de compatibilité AspCompat = true dans un

<%@ Page> 
tag

sur la page ASP.NET

L'attribut AspCompat force la page à exécuter en mode STA

ASP.NET par défaut utilise des threads MTA (appartement multi-thread)

Lors de la construction des applications ASP.NET interface avec ancienne école COM objets comme ceux créés avec VB6 ou Visual FoxPro (MTDLL), il est extrêmement important que les threads qui utilisent des demandes simple servent fileté Appartement Threading. STA est une COM technologie intégrée qui permet aux composants filetés essentiellement unique de fonctionner de manière fiable dans un environnement multi-thread. La garantie STA que les objets COM instanciés sur un thread spécifique restent sur ce thread spécifique et tout accès à un objet COM à partir d'un autre thread place automatiquement ce thread dans le thread STA. L'effet final est que vous pouvez avoir plusieurs threads, mais une instance d'objet COM vit sur un fixe qui ne change jamais fil . Par défaut, ASP.NET utilise des threads MTA (multi-threaded apartment) ASP.NET utilise par défaut les threads MTA (multi-threaded apartment) sont vraiment threads libres qui ne tiennent pas compte de l'objet COM Marshaling.C'est beaucoup plus efficace que le threading STA qui a un peu de surcharge pour déterminer si c'est OK pour exécuter du code sur un thread donné ou si un type de marshaling COM/thread doit se produire. Les composants COM MTA peuvent être très efficaces, mais les composants STA COM dans un environnement multithread tendent toujours à avoir une quantité de surcharge supérieure à .

STA dans ASP.NET

Support pour filetage STA dans le cadre d'ASP.NET est assez limité. Spécifiquement, seule la technologie ASP.NET WebForms d'origine prend en charge le thread STA directement via son implémentation STA Page Handler ou ce que vous pouvez appeler le mode ASPCOMPAT ( ). Pour WebForms exécutant des composants STA est aussi facile que de spécifier l'attribut ASPCOMPAT dans la balise @Page:

<%@ Page Language="C#" AspCompat="true" %> 

qui exécute la page en mode STA. Le supprimer fonctionne en mode MTA. Simple.

STA pour les non support ASP.NET Technologies

seulement WebForms supporte nativement STA

  • ASP.NET httphandlers
  • ASMX Web Services
  • ASP. NET MVC
  • WCF Web Services
  • ASP.NET API Web

composants STA sont une douleur dans le cul. Je sens votre douleur :-)

Bonne référence:

https://weblog.west-wind.com/posts/2012/Sep/18/Creating-STA-COM-compatible-ASPNET-Applications#STAfornonsupportingASP.NETTechnologies