Running C# Interop Control ActiveX on Client Side from ASP.N

本文关键字:Side from ASP Client on Interop Control ActiveX Running | 更新日期: 2023-09-27 18:04:44

我正在尝试使用ASP制作一个简单的web应用程序。NET和Interop COM.

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

我正在使用:
IIS Windows Server 2008
C#互操作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>

第二:in.aspx

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

和在.cs文件中:

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

在服务器端,我打开Internet Explorer,工作起来很有魅力。但在客户端出现:对象不支持此属性或方法。

我也试过:

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

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

使用"对象标记"是正确的方法吗?有没有其他方法可以在客户端使用COM?如何配置IIS以避免Object在客户端不支持此属性或方法?

提前感谢

1#更新

我创建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#更新

我尝试了另一个测试

我制作了一个新的组件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";
        }
    }
}

在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>

我更改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注册这个下载的组件。

服务器。NET:C:'Windows'Microsoft.NET'Framework'v4.0.30319
客户网络:C:'Windows'Microsoft.NET'Framework'v4.0.30319

为什么不工作?这毫无意义。

3#更新

我在另一台机器"客户端"上运行。我更改IE设置以运行不安全的ActiveX。工作,在这之后,我在Windows XP客户端上尝试,我重新设置了设置,并再次设置为运行ActiveX不安全。这是有效的

现在问题与从ASP安装InteropCOM有关。我尝试安装,但显示:对象不支持此属性或方法。我认为这与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项目吗?为什么这不起作用?

Running C# Interop Control ActiveX on Client Side from ASP.N

我找到了解决方案:在CAB中为Internet Explorer部署C#ActiveX,使用

我做了以下事情:

斯特朗为程序集命名
已创建INF文件
使用Visual Studio 2010"安装项目"模板创建了MSI
使用"Makecab.exe"创建CAB文件

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

我搜索错了,不是组件COM C#,而是C#ActiveX控件。我把ATL COM C++搞混了。

感谢

要在客户端实现类似的工作,只要可以使用客户端机器上的安全设置,就必须注册DLL。考虑到使您的网站正常工作的这一要求,我认为某种类型的windows应用程序(winForms、WPF,甚至更新的Silverlight(可能是一个更好的选择,因为您可以确保安装COM位(或本机位,在使用本机的情况下(。

COM的一个问题是,标识符必须注册(即在注册表中(才能工作,因为这是Windows查找位的唯一指针。