En cours d'exécution C# Interop Contrôle ActiveX sur le Côté Client de ASP.NET

Je suis en train de faire une application web simple à l'aide de ASP.NET et Interop COM.

La principale question est: Comment faire Interop COM travaille à côté client?

Je suis à l'Aide de:

IIS de Windows Server 2008

C# Interop COM - Visual Studio 2010

Asp .NET - Visual Studio 2010

D'après ces articles
http://msdn.microsoft.com/en-us/library/aa479302.aspx
et http://msdn.microsoft.com/en-us/magazine/cc301832.aspx.
J'ai essayé d'utiliser le composant sur le côté client de deux façons:

Première:

<object id="Obj" codebase="MyApp.dll#version=1,0,0,0" classid="clsid:C6659361-1625-4746-931C-36014B146679" VIEWASTEXT></object> 
    <script type="text/javascript" >
        function test() {
            alert('TEst');
            Obj.PrintHi();
            alert('and');
        }
    </script>

Deuxième:
dans .aspx

<object id="Obj" codebase="MyApp.dll#version=1,0,0,0" classid="clsid:C6659361-1625-4746-931C-36014B146679" VIEWASTEXT></object>

et dans .cs fichier:

RegisterClientScriptBlock("showSaveMessage", "<script language=\"JavaScript\"> Obj.PrintHi();  </script>");

À côté serveur j'ai ouvert Internet Explorer et fonctionne comme un charme. Mais à côté client apparaît: cet Objet ne gère pas cette propriété ou cette méthode.

J'ai aussi essayé:

<%
    set Obj = CreateObject("MyApp.MyClass")

    Obj.PrintHi
%>

Fonctionne pour les deux côtés, mais seulement d'appel MyApp.dll installé sur le côté serveur.

À l'aide de la "balise object' est la manière correcte? Est-il une autre façon d'utiliser COM à côté client? Comment faire pour configurer IIS pour éviter cet Objet ne gère pas cette propriété ou cette méthode à côté client?

Merci d'Avance

1# mise à Jour

J'ai créer ASP.NET C# dans Visual Studio 2010 sur Windows XP 32bits utilise un C# Interop COM.
Sur ma machine "Windows XP" je ne Début de Débogage et IE page s'ouvre avec ma demande. Les travaux de cette.
J'ai donc copié le projet pour Windows Server 2008 et a ajouté que le projet dans IIS. Lorsque j'exécute IIS s'ouvre IE et cela fonctionne.

Après cela, j'ai essayé de faire le test final, j'ai Donc ouvert l'IE sur Windows XP et tapez l'adresse que Windows générées par le Serveur, fine, je peux voir la page, mais quand je clique pour l'exécution de la fonction, s'affiche: "l'Objet ne gère pas cette propriété ou méthode".

Serveur:

Windows 2008 R2 64bits

La version de IE 9

Client:

Windows XP 32bits

La version de IE 8

2# mise à Jour

J'ai essayé un autre test

J'ai fait un nouveau Composant COM

IClassTest.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace MyCOM
{
    [ComVisible(true)]
    [Guid("8F388924-7743-4166-993F-CBF897D08A8B")]
    public interface IClassTest
    {
        string getString(string str);
    }
}

ClassTest.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace MyCOM
{
    [ComVisible(true)]
    [Guid("1AE4AD64-A951-4E6C-8600-AA1F08810DDD")]
    public class ClassTest : IClassTest
    {
        public string getString(string str)
        {
            return str + "1";
        }
    }
}

Dans AssemblyInf.cs a [assembly: ComVisible(true)]

J'ai fait une autre application asp:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="asp_test._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
<object id="Obj" codebase="MyCOM.dll#version=1,0,0,0" classid="clsid:1AE4AD64-A951-4E6C-8600-AA1F08810DDD" VIEWASTEXT></object> 
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">

<script type="text/javascript" >
    function test() {
        var test = Obj.getString('2');
        alert(test);
    }
    </script>
    <input name="btnTest" value="Call COM" onclick="test()" style=" width: 400px;" type="button">
</asp:Content>

- Je modifier les paramètres d'internet explorer pour afficher ActiveX pas confiance et exécuter le programme.
Dans windows XP qui fonctionne, Dans Windows Server fonctionne. Mais lorsque vous essayez d'appeler la page à partir de windows XP Windows XP appeler Windows 2008 page" s'affiche: "cet Objet ne gère pas cette propriété ou cette méthode"

Si sur le côté client, je ne regasm /u MyCOM.dll l'IE invité à installer le composant.
La dll est stocké dans le C:\WINDOWS\Downloaded Program Files, si j'essaie d'installer plus d'une fois, crée un dossier appelé CONFLICT.1.. C:\WINDOWS\Downloaded Program Files\CONFLICT.1 très étrange. J'ai aussi essayé d'enregistrer cette téléchargé composant avec regasm MyCOM.dll /codebase.

Serveur .NET: C:\Windows\Microsoft.NET\Framework\v4.0.30319

Client .NET: C:\Windows\Microsoft.NET\Framework\v4.0.30319

Pourquoi ne pas travailler? Il ne fait aucun sens.

3# mise à Jour

J'ai couru sur une autre machine "Client". - Je modifier les paramètres d'internet explorer pour exécuter pas à l'abri de l'ActiveX. Et ses Œuvres, d'Après ce que j'ai essayé sur Windows XP Client j'ai réinitialisé les paramètres et configurer à nouveau exécuter un contrôle ActiveX pas à l'abri. Les Travaux De Cette.

Maintenant, le problème est lié à Installer Interop COM à partir d'ASP. J'ai essayé de l'installer mais apparaît: cet Objet ne gère pas cette propriété ou cette méthode. Je pense que c'est lié à Safe Inicialization. J'ai trouvé ce lien: http://msdn.microsoft.com/en-us/library/aa751977.aspx#iobjsafe mais est pour le C++, Est-il C# exemples?

4# mise à Jour

J'ai essayé d'utiliser:

public class ClassTest : System.Windows.Forms.UserControl, IClassTest

J'ai aussi essayé de faire un .fichier cab, mais ne fonctionne pas.

Ai-je à faire de projet wpf? Pourquoi cela ne fonctionne pas?

Avez-vous votre COM dll enregistrée à côté client? Il ne fonctionnera jamais si vous n'avez pas
Oui, je l'ai fait. Je l'ai enregistré avec regasm MyApp.dll /base de code.
Est votre "côté client" d'une version 64 bits de l'OS? si elle l'est, peut-être vous avez besoin d'enregistrer votre fichier dll pour les deux architectures. Voir la réponse à cette question, DONC pour plus de détails.
Mon "côté client" est Windows XP 32bits. Je n'ai pas le dossier "Framework64' 🙁
Dans IIS j'ai marqué dans la V4.0.NET pour activer l'application 32bits, mais le même message s'affiche "cet Objet ne gère pas cette propriété ou cette méthode" côté client. Merci

OriginalL'auteur Cobaia | 2011-08-04