ActiveX Asp.NET problem

cs_Kyoto Messages postés 28 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 28 août 2008 - 25 juil. 2008 à 10:25
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 26 juil. 2008 à 22:18
Hello world !

Alors voilà j'ai un site web en asp.net, et depuis ce site je voudrais piloter une application qui est CodeSoft ( création d'étiquette ), Donc j'ai référencer la dll de codesoft dans mon projet Web.

Et j'ai mis dans mon Page_Load ce bout de code que j'ai trouvé dans les exemples CodeSoft en VB.NET :

Dim MyApp As LabelManager2.Application
MyApp = New LabelManager2.Application
MyApp.Visible = True

Mais le probleme c'est que lors de l'éxécution de ma page web j'ai cette erreur :

Accès refusé.
Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.UnauthorizedAccessException: Accès refusé.

ASP.NET n'est pas autorisé à accéder à la ressource demandée. Accordez des droits d'accès à la ressource pour l'identité de la demande ASP.NET. ASP.NET a une identité de processus de base (en règle générale {MACHINE}\ASPNET sur IIS 5 ou Network Service sur IIS 6) qui est utilisée si l'application n'emprunte pas d'identité. Si l'application emprunte une identité via , l'identité sera l'utilisateur anonyme (en règle générale IUSR_MACHINENAME) ou l'utilisateur de la demande authentifié.

Pour accorder un accès en écriture ASP.NET à un fichier, cliquez avec le bouton droit sur le fichier dans l'Explorateur, choisissez "Propriétés" et sélectionnez l'onglet Sécurité. Cliquez sur "Ajouter" pour ajouter l'utilisateur ou le groupe approprié. Sélectionnez le compte ASP.NET et activez les cases à cocher pour l'accès souhaité.

Erreur source:

Ligne 23 : Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Ligne 24 : Dim MyApp As LabelManager2.Application
Ligne 25 : MyApp = New LabelManager2.Application
Ligne 26 : MyApp.Visible = True
Ligne 27 :

Fichier source : c:\inetpub\wwwroot\AssistantEtiquette\WebForm1.aspx.vb Ligne : 25

Trace de la pile:

[UnauthorizedAccessException: Accès refusé.]
AssistantEtiquette.WebForm1.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\AssistantEtiquette\WebForm1.aspx.vb:25
System.Web.UI.Control.OnLoad(EventArgs e) +67
System.Web.UI.Control.LoadRecursive() +35
System.Web.UI.Page.ProcessRequestMain() +750

J'ai essayé de suivre leur procédure, j'ai donc fait click droit sur mon WebForm1.aspx et ajouter l'utilisateur ASPNET avec tous les droits ( écriture et lecture ) mais j'ai toujours le meme probleme, donc si vous avez une idée je suis prenneur.

Merci d'avance , cordialement




kyoto

10 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
25 juil. 2008 à 13:27
Salut,

Essaie de mettre le site en fulltrust

Outils d'administration> Microsoft .NET Framework 2.0 Configuration

Ordinateur >localIntranetZone
Properties
Jeu d'autorisations --> Fulltrust

Et  d'ajouter le site localhost ou autre (serveur de dev) en site de confiance dans les options IE
Sécurité Site de confiance.

Bon coding
0
cs_Kyoto Messages postés 28 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 28 août 2008
25 juil. 2008 à 14:13
J'ai mis le site en fulltrust, et l'intranet , j'ai mis la dll en controle total mais j'ai toujours la même erreur je sais plus comment faire.

Si vous avez une idée

Merci d'avance

kyoto
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
25 juil. 2008 à 14:38
Et ton site est bien en site de confiance.

Je seche un peu.

Il faut peut ajouté des attributs de sécurité sur certaines méthode
avec des assert() ou demand()

[assembly: SecurityPermission(SecurityAction.RequestMinimum,UnmanagedCode = true)]

Avant ton namespace dans une de tes classes de ta dll.

Avcant l'appel de tes  methodes de ton composant.
 new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert();

C'est assez dur à résoudre les problèmes de sécurité.
Et tout dépend des OS et des composants a faire fonctionner.

Bon courage
0
cs_Kyoto Messages postés 28 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 28 août 2008
25 juil. 2008 à 15:34
Donc j'ai un peu avancer dans mon problème je n'ai désormais plus de message d'erreur. Ma page web met longtemps à se charger  mais codeSoft ne s'ouvre pas et j'ai ce message d'erreur dans le event viewer :

La description pour l'ID d'événement ( 0 ) dans la source (.NET Runtime) est introuvable. L'ordinateur local n'a peut-être pas les informations de Registre ou les librairies requises pour afficher les messages émanant d'un ordinateur distant. Vous pourrez peut-être utiliser l'option /AUXSOURCE= pour récupérer cette description. Reportez-vous aux rubriques Aide et support pour plus de détails. Les informations suivantes font partie de l'événement : Unable to open shim database version registry key - v2.0.50727.00000.

Pour arriver ici j'ai juste lancé DCOMCNFG

Je suis allé dans :
Components Services -> Ordinateurs -> Poste de travail

Click droit sur poste de travail -> propriété -> sécurité com

J'ai modifié autorisations d'accès et autorisations d'éxécution et d'activation , j'y ai ajouté l'utilisateur ASPNET avec le controle total

merci de m'aider nhervagault

kyoto
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
25 juil. 2008 à 23:56
Bonjour,

que cherches tu as faire ? lancer ton application sur le client ? ou sur le serveur ? sur le client c'est impossible ! n'oublie pas que ASP.net est un serveur web et ne fait que répondre à des requetes HTTP, rien de plus ! sur le serveur, c'est théoriquement possible mais TRES déconseillé, en effet par défaut, ASP.net/IIS est un service, il utilise donc un compte qui n'a pas de dekstop, ou voudrais tu afficher ton application ? Il me semble que c'est assez pénible de faire afficher une fenetre windows à partir d'un service windows, je suis pas sur qu'utiliser de l'impersonation au niveau de IIS/ASP.net afin d'utiliser le compte windows d'une session active sur le serveur suffit.

Afin de savoir quelle problème de sécurité tu as, regarde l'inerException de ton exception, tu peux aussi utiliser filemon afin de voir tous les accés disques et vérifier ceux qui sont refusé.

<hr />Cyril - MVP ASP.net - MCPD ASP.net & MCTS SQL - Consultant indépendant
0
cs_Kyoto Messages postés 28 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 28 août 2008
26 juil. 2008 à 10:31
Ok mais ,ce que je me demande c'est comment font les antivirus en ligne pour éxécuter leur activeX sur la machine de l'utilisateur ?

Enfaite c'est ça que je voudrais faire éxécuter du code sur la machine cliente de l'utilisateur pour pouvoir lancer des impressions.

Cordialement

kyoto
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
26 juil. 2008 à 10:33
C'est donc coté client. Rien à voir avec ASP.net, mais JavaScript donc www.javascriptfr.com :-)

<hr />Cyril - MVP ASP.net - MCPD ASP.net & MCTS SQL - Consultant indépendant
0
cs_Kyoto Messages postés 28 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 28 août 2008
26 juil. 2008 à 10:42
Ok merci jesusonline , mais je me demandais en javascript est ce que je peux éxécuter du code en VB.NET ?

kyoto
0
cs_Kyoto Messages postés 28 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 28 août 2008
26 juil. 2008 à 11:09
en activeX coté client plutot, est ce que on peut le créer en vb.NET

kyoto
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
26 juil. 2008 à 22:18
Salut,

Alors pour repondre a la question il faut faire un usercontrol windows forms et l'embarqué dans une balise object dans ta page web

Dans le user control c'est ton code fonctionnel de ta windows form.

Pour empecher le click sur le controle pour activer
utilise
<form id="form1" runat="server">
      <script type="text/javascript" src="object.js"></script>
    </form>

et dans object.js

document.write('<object id="MonId" height="..." width="..." classid="MaLib.dll#Namespace.UserControlClas" VIEWASTEXT> </object>');

Apres il est possible d'acceder au usercontrole par du javascript

getElementById("MonId").MethodPublique();
et
...MyPropertie = "TOTO" ou 1; en fonction du type

Voila de quoi faire avancé le probleme.

Il y a normalement pas besoin de faire une dll COM avec la tuyauterie il faut peut etre peut etre que ton assemblies soit comvisible.

Voila
0
Rejoignez-nous