none
ActiveX RunAt server RRS feed

  • Discussion générale

  • Bonjour,

    J'ai besoin d'utiliser un ActiveX (en arcitecture COM).

    J'arrive très bien à l'utiliser sur un WinForm.

    Mais en ASP.Net, j'ai quelques soucis.

    Mon besoin serait de placer un Runat="Server" sur le tab Object. Mais lorsque je le fais ça plante :

    Erreur d'analyse

    Description : Une erreur s'est produite au cours de l'analyse d'une ressource requise pour répondre à cette demande. Veuillez consulter ci-dessous les détails relatifs à l'erreur d'analyse en question, puis modifier votre fichier source de manière appropriée.

    Message d'erreur de l'analyseur: Le Guid doit contenir 32 chiffres et 4 tirets (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

    Erreur source:
    Ligne 18 :     <object id="DS3DVIAPlayerActiveXLib" height="100%" width="100%"  classid="clsid:410B702D-FCFC-46B7-A954-E876C84AE4C0" 
    Ligne 19 :     codebase="3DVIAPlayerActiveX.cab" runat="server">
    Ligne 20 :     <param name="_ExtentX" value="16060"><param name="_ExtentY" value="13229"><param name="_StockProps" value="0">

    François


    FB

    • Type modifié Aurel Bera mercredi 14 novembre 2012 07:33 Pas de reponse
    mercredi 7 novembre 2012 12:23

Toutes les réponses

  • Voici le bout de code qui plante :

    <object id="DS3DVIAPlayerActiveXLib" height="100%" width="100%"  classid="clsid:410B702D-FCFC-46B7-A954-E876C84AE4C0" 
        codebase="3DVIAPlayerActiveX.cab" runat="server">
        <param name="_ExtentX" value="16060"><param name="_ExtentY" value="13229"><param name="_StockProps" value="0">
        <param name="RenderGroundShadow" value="0"><param name="RenderMode" value="1"><param name="CameraPlayMode" value="1">
        <param name="AntiAliasingOnIdle" value="0"><param name="GroundGrid" value="0"><param name="AutoPlay" value="0"><param name="FileName" value="OP040.12.2.smg"></object>
        </form>

    Si je vire le runat="server", tout fonctionne...

    FB

    mercredi 7 novembre 2012 12:25
  • Bonjour,

    Le problème est qu'il existe une balise serveur "object" qui n'a rien à voir avec la balise cliente "object".

    On veut le mettre en runat=server pour quelle raison ? On veut manipuler la balise sur le serveur ?

    Selon la manip que l'on veut faire on devrait pouvoir par exemple metttre une balise literal à l'intérieur de la balise object (si on veut par exemple pouvoir ajouter des paramètres) ou encore utiliser la syntaxe <%=Variable%> si on veut par exemple transmettre un nom de fichier ou  encore utiliser une bibliothèque javascript qui ferait l'instanciation etc... - en gros tout sauf une balise object serveur ;-)

    Par exemple : http://stackoverflow.com/questions/2223493/set-object-param-tag-from-code-behind


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".



    mercredi 7 novembre 2012 12:51
    Modérateur
  • Il y a certains événements et méthodes fournis par cet activeX qui m'intéressent côté serveur...


    FB



    mercredi 7 novembre 2012 12:56
  • Ce sont très probablement des évènements qui concernent le client (et donc qui seront accessibles via javascript).

    Le fait de passer une balise HTML en runat="server" permet de créer juste une "représentation" de ce contrôle sur le serveur dont le seul but est de pouvoir influer sur le code HTML qui sera généré au final. Le code HTML sera toujours envoyé et traité par le navigateur côté client.

    Pour l'instant je pense que vous voulez pouvoir manipuler ce contrôle sur le client au sein de la page web ce qui peut se faire par exemple avec du code JavaScript.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mercredi 7 novembre 2012 14:26
    Modérateur
  • Pour sur, je me sens plus à l'aise côté serveur... Mais j'ai certains doutes.

    Cet ActiveX est développé et maintenu par Dassault... Il permet l'affichage d'objet 3D.

    Je vais essayer de vous détailler mon besoin pour tenter de trouver la solution

    Dans ma page, je vais avoir 2 parties :

    1. L'utilisateur va devoir choisir un article (qui correspondra à un fichier d'extension SMG)
    2. L'ActiveX va afficher le SMG correspondant
    3. L'utilisateur va manipuler l'objet 3D pour personaliser des textures (géré par l'activeX)
    4. Au final, il appuiera sur un bouton de l'activeX qui enregistrera en jpg sa "création"

    Les évènements que j'aurais aimés avoir sont :

    • EndLoadModel : pour n'afficher l'activeX que quand il est chargé.
    • ChangeLayer : pour savoir quand il change une texture

    Et au moins la méthode

    • ExportAllViews : pour exporter une capture ecran au format jpg

    FB

    mercredi 7 novembre 2012 14:51
  • Pourriez vous me présenter un exemple d'exploitation d'évenement d'un ActiveX en javascript ?

    Même chose pour une méthode.

    Merci


    FB

    mercredi 7 novembre 2012 15:05
  • Par exemple vous pourriez vous faire la main avec le contrôle QuickTime : https://developer.apple.com/library/mac/#documentation/quicktime/Conceptual/QTScripting_JavaScript/bQTScripting_JavaScri_Document/QuickTimeandJavaScri.html#//apple_ref/doc/uid/TP40001526-CH001-SW5

    Sinon il m'est arrivé je crois d'aller sur des sites qui utilisent ce contrôle mais jamais de développer avec (la doc semble requérir un enregistrement). Bien vérifier aussi que ce contrôle est bien prévu pour le web.

    Le principe sera donc :
    - l'attribut id permettra de récupérer cet objet (document.getElementById par exemple )
    - une fois le contrôle récupéré on travaille avec la variable concernée et on appelle des méthodes (+ou- comme dans avec n'importe quel autre langage) ou on gère des évènements (cf la doc ci-dessus pour les gestionnaires d'évènements en JavaScript).

    Tout cela se fait donc sur le client dans la page HTML (le principe du web est d'exécuter du code sur le serveur mais le but de ce code est de générer du HTML affiché dans le navigateur et qui est le seul environnement avec lequel l'utilisateur peut interagir directement).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mercredi 7 novembre 2012 17:36
    Modérateur
  • Vos conseils m'ont fait progresser mais je n'arrive pas à résoudre un problème.

    J'ai réussi à exploiter une méthode "SaveImageFullViewport" de l'activeX qui fait une capture écran.

    Le fichier généré est déposé dans le répertoire temporaire de l'utilisateur. Une autre méthode "GetTempFolder" de l'activeX me retourne la path.

    Je connais donc le nom et l'emplacement du fichier sur le poste client.

    existe t'il un moyen de récupérer le fichier côté serveur? (je pense que non)


    FB


    jeudi 8 novembre 2012 22:24
  • Ce qui semble bizarre est que vous arriviez à sauver un fichier sur le disque dur de l'utlisateur. Un contrôle ActiveX utilisé sur un site web n'aura pas un tel droit.

    Vous n'avez pas fait ce code directement dans la page ASPX ou son code ? Si oui, le code s'exécute sur le serveur et l'utilisateur ne verra donc rien du tout lorsque cela sera déployé sur un "vrai" serveur web...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    vendredi 9 novembre 2012 10:06
    Modérateur
  • Oui, il est vrai que je suis dans mon environnement de dev (roohhh le débutant!!!)

    Ben je suis donc encore plus coincé


    FB

    vendredi 9 novembre 2012 10:09
  • Je dirais reprenons au début. Déjà ce contrôle ActiveX est-il prévu explicitement pour une utilisation Web ? Il m'est arrivé d'aller sur des sites web avec des contrôles VIA (en tant que simple utilisateur, je n'ai jamais utilisé en tant que développeur). J'ai regardé vite fait sur leur site et il semble y avoir un grand nombre de contrôles différents.

    Si c'est un contrôle orienté "conception", il est probable qu'il soit plutôt destiné à être intégré dans une appli Windows car il nécessite des droits forts sur le PC pour sauver des fichiers par exemple.

    Si c'est un contrôle orienté "consommation", on doit alors pouvoir l'utiliser dans une page web (mais la doc ne semble pas facilement accessible, il faut s'enregistrer). Après le principe d'utilisation sera le même que pour tout autre contrôle.

    Donc à voir déjà si on est dans le cas de figure #1 ou #2.

    C'est http://www.3dviacomposer.com/demo/ ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    vendredi 9 novembre 2012 10:28
    Modérateur
  • Oui il est utilisé actuellement sur un client léger

    Il est actuellement intégré dans un configurateur dans le portail de VDoc (vdoc portal).

    Actuellement l'utilisateur doit :

    1) choisir le répertoire/fichier destination (pour enregistrer le fichier)

    2) puis le REsélectionner pour l'intégrer

    Je voulais essayer d'alléger le processus d'une part et utiliser la nouvelle solution pour un autre besoin interne.

    Donc actuellement, cet activeX est orienté conception ET consommation et nous sommes dans les 2 cas en appli web...

    oui c'est cet activeX (et je confirme qu'il est payant!!^^)


    FB



    vendredi 9 novembre 2012 10:37
  • http://www.3ds.com/fr/products/3dvia/3dvia-composer/resource-center

    Ici on peut télécharger la version gratuite (que je pensais suffisante)

    vendredi 9 novembre 2012 11:50
  • Je crois voir aussi qu'il faut une installation préalable explicite hors du navigateur et si c'est un besoin interne les éventuels problème de droits peuvent être contournés.

    Actuellement je crois comprendre que l'on opère peut-être directement depuis le code behind de la page ASPX (donc sur le serveur ce qui ne convient pas). Sur le client on aurait plutôt qq chose comme :

    <!DOCTYPE html>
    <html>
    <head>
    <script type="text/javascript">
    function test()
    {
    var o=document.getElementById("o");
    alert(o.innerText);
    }
    </script>
    </head>
    <body>
    <object id="o">Some text...</object><input type="button" onclick="test();"
    </body>
    </html>

    Le principe est donc de récupérer une variable qui correspond au contrôle et on peut appeler ensuite les fonctions mises à disposition par cet objet et le contrôler ensuite en JavaScript. Si on veut lire un fichier local sans intervention de l'utilisateur cela sera assez dificile (par exemple instanciation d'un Scripting.FileSystemObject mais cela nécessiterait une config particulière des postes sur la sécurité de ce site, à défaut si cette instanciation ne marche pas on peut se rabattre sur la méthode actuelle ce qui permettrait de pouvoir prendre en charge les deux façons de procéder selon le cas). L'idéal serait que ce contrôle permette de récupérer directement les données de l'image sans passer par le disque, ce serait plus facile (on récupère les données et ne reste plus qu'à les envoyer vers le serveur)...

    C'est sans doute assez ambitieux si vous commencez juste dans la programmation JavaScript...

    Par exemple http://www.codeproject.com/Articles/18869/File-Handling-at-Client-Side-Using-Javascript . Noter que cela nécessite une configuration particulière (mettre ce site dans la zone de confiance sur les PC concernés). Voyez avec vos admins si c'est acceptable et supporté par le navigateur et l'OS que vous utilisez...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".




    vendredi 9 novembre 2012 11:59
    Modérateur
  • C'est bien avec un extranet, donc moins simple.

    Par contre les SMG (fichiers 3D) sont stockés sur un serveur WebDav.

    Je viens de publier mon site "Test" pour voir et le comportement une fois publié n'est pas ce que l'on croyait :)

    J'ai eu du mal à faire en sorte que l'activeX trouve le SMG (j'expliquerai ci-dessous) mais surtout, je confirme que l'image est sauvée sur le poste client^^

    <script type="text/javascript" language="javascript">
        function getElement(aID) {
            return (document.getElementById) ?
                document.getElementById(aID) : document.all[aID];
        }
    
        function adjustMyHeight() {
            var ActiveX = getElement("DS3DVIAPlayerActiveX");
            ActiveX.height = document.body.offsetHeight - 50;
        }
    
        function Enreg() {
            var ActiveX = getElement("DS3DVIAPlayerActiveX");
            ActiveX.SaveImage("OP040.12.2.jpg");
        } 
    
    </script>
    
    </head>
    <body id="masterbody" style="height:100%"  runat="server">
    <form id="form2" action="Default.aspx"  style="height:100%" runat="server">  
    
    <input id="Photo" type="button" value="button" onclick="Enreg()"   />
    
        <object id="DS3DVIAPlayerActiveX" width="100%"  classid="clsid:410B702D-FCFC-46B7-A954-E876C84AE4C0" 
            codebase="3DVIAPlayerActiveX.cab" align="left"    >
                <param name="_ExtentX" value="33814"/>
                <param name="_ExtentY" value="13229"/>
                <param name="_StockProps" value="0"/>
                <param name="RenderGroundShadow" value="0"/>
                <param name="RenderMode" value="2"/>
                <param name="CameraPlayMode" value="0"/>
                <param name="AntiAliasingOnIdle" value="0"/>
                <param name="GroundGrid" value="0"/>
                <param name="AutoPlay" value="1"/>
                <param name="ShowAssemblyTreeBar" value="1"/>
                <param name="ShowPropertyBar" value="1"/>
                <param name="ShowStandardToolBar" value="0"/>
                <param name="FileName" value="OP040.12.2.smg"/>         
            </object >     
        
    </form>
    
    </body >

    Et donc implémenté comme ci-dessus, l'activeX ne semble pas trouver le fichier OP040.12.2.smg

    Je l'ai donc copié sur le poste client et j'ai copié dans le répertoire du client (par ex :c:\OP040.12.2.smg) et ça fonctionne .


    FB


    vendredi 9 novembre 2012 12:19
  • Ok donc vous manipulez bien le contrôle en JavaScript et non pas en "code-behind". Cette page HTML est bien accédée avec un navigateur et se trouve sur le serveur web ?

    Il n'y a aucune demande faite à l'utilisateur et le site n'est pas dans une zone de sécurité particulière ?

    Normalement quand on référence un fichier depuis une page web sans préciser le chemin, il est pris au même emplacement que la page web donc sur le serveur. Souvent également une page web présente sur un serveur ne peut pas référencer un fichier local (donc sur c:) là encore pour des raisons de sécurité.

    Je trouve donc fortement suspect que l'on puisse sauver un fichier localement (éventuellement acceptable si le dossier et l'extension ne peuvent pas être choisie arbitrairement sinon je peux potentiellement écraser un fichier sur le disque de l'utilisateur depuis mon site web) et encore plus louche que cela fonctionne lorsque le fichier smg est copié en local (et en plus à la racine ?).

    Donc soit il y a encore un petit qq chose qui nous échappe dans votre config de test (je crois comprendre que là vous utilisez bien un serveur web différent de votre propre machine), soit ce contrôle fonctionne de façon très inhabituelle par rapport à ce que je vois généralement (et dans ce dernier cas, le plus simple pourrait être de voir un forum de support qui serait dédié à ce contrôle si cela existe).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".






    vendredi 9 novembre 2012 12:40
    Modérateur
  • Bonjour,

    Nous changeons le type de votre question à « Discussion générale » parce que vous n’êtes pas revenu avec les informations sollicitées. Si vous avez plus de temps pour réexaminer la question et fournir plus d'informations, n'hésitez pas à modifier le type du thread à « Question ». Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires.

    Merci !

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mercredi 14 novembre 2012 07:33
  • Je n'ai pas répondu parce que je n'ai pas encore réussi à trouver de solution...

    FB

    mercredi 14 novembre 2012 08:38