从ASP.NET在客户端运行C#Interop Control ActiveX

Cob*_*aia 5 c# asp.net com iis interop

我正在尝试使用ASP.NET和Interop COM创建一个简单的Web应用程序.

主要问题是:如何使Interop COM在客户端工作?

我正在使用:
IIS Windows Server 2008
C#Interop COM - Visual Studio 2010
Asp .NET - Visual Studio 2010

看完这些文章后,请访问
http://msdn.microsoft.com/en-us/library/aa479302.aspx
http://msdn.microsoft.com/en-us/magazine/cc301832.aspx.
我尝试以两种方式在客户端使用该组件:

第一:

<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>
Run Code Online (Sandbox Code Playgroud)

第二:在.aspx中

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

并在.cs文件中:

RegisterClientScriptBlock("showSaveMessage", "<script language=\"JavaScript\"> Obj.PrintHi();  </script>");
Run Code Online (Sandbox Code Playgroud)

在服务器端,我打开Internet Explorer,就像一个魅力.但在客户端出现:对象不支持此属性或方法.

我也尝试过:

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

    Obj.PrintHi
%>
Run Code Online (Sandbox Code Playgroud)

适用于双方,但只调用服务器端安装的MyApp.dll.

使用'object tag'是正确的方法吗?还有另一种在客户端使用COM的方法吗?如何配置IIS以避免Object在客户端不支持此属性或方法?

提前致谢

1#更新

我在使用C#Interop COM的Windows XP 32位上的Visual Studio 2010中创建ASP.NET C#.在我的机器"Windows XP"上,我开始调试,IE页面随我的应用程序打开.这有效.
所以我将项目复制到Windows Server 2008并在IIS中添加了项目.当我运行IIS打开IE,这是有效的.

在此之后我尝试进行最终测试,所以我在Windows XP上打开IE并输入Windows Server生成的地址,很好,我可以看到该页面,但是当我点击运行该功能时,出现:"对象没有支持此属性或方法".

服务器:
Windows 2008 R2 64位
IE版本9

客户端:
Windows XP 32位
IE版本8

2#更新

我尝试了另一个测试

我制作了一个新的Component 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在AssemblyInf.cs中有 [assembly: ComVisible(true)]

我做了另一个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>
Run Code Online (Sandbox Code Playgroud)

我更改IE设置以显示ActiveX不信任并运行该程序.在Windows XP中工作,在Windows Server中工作.但是当尝试从Windows XP调用页面时"Windows XP调用Windows 2008页面"出现:"对象不支持此属性或方法"

如果在客户端我做regasm /u MyCOM.dll了IE提示安装组件.dll存储在C:\WINDOWS\Downloaded Program Files,如果我尝试多次安装,创建一个名为的文件夹CONFLICT.1.. C:\WINDOWS\Downloaded Program Files\CONFLICT.1非常奇怪.我也试着用这个下载的组件注册regasm MyCOM.dll /codebase.

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

为什么不工作?这没有道理.

3#更新

我跑了另一台机器"客户端".我更改IE设置以运行不安全的ActiveX.和Works,在此之后,我尝试在Windows XP客户端上重新设置并重新设置以运行ActiveX不安全.这个作品.

现在问题与从ASP安装Interop COM有关.我尝试安装但出现:对象不支持此属性或方法.我认为这与此有关Safe Inicialization.我找到了这个链接:http://msdn.microsoft.com/en-us/library/aa751977.aspx#iobjsafe但是用于C++,是否有C#示例?

4#更新

我试图使用:
public class ClassTest : System.Windows.Forms.UserControl, IClassTest
我也尝试做.cab文件,但不起作用.

我要制作wpf项目吗?为什么这不起作用?

Cob*_*aia 3

我找到了解决方案:Deploy C# ActiveX in a CAB for Internet Explorer use

我做了以下事情:

强命名大会。
创建了 INF 文件
使用 Visual Studio 2010“安装项目”模板创建了 MSI。
使用“Makecab.exe”创建了一个CAB文件

有关标记为安全脚本编写的详细信息,请参阅此链接 http://www.olavaukan.com/2010/08/creating-an-activex-control-in-net-using-c/

我搜索错了,不是Component COM C#,是C# ActiveX Control。我与 ATL COM C++ 混淆了。

谢谢