WEB下引用.NET Windows Control(Windows控件)经常出现的错误和解决办法

因为B/S项目有很多打印发票单据的需要,所以在网页中使用了Windows Control,专门用C#做了一个打印控件,页面调用这个打印控件,控件从WEBSERVICE获取数据进行打印,使用中出现过的一些问题,总结了一下,希望对大家有所帮助。
控件的代码如下:
  1using System;
  2using System.Collections;
  3using System.ComponentModel;
  4using System.Drawing;
  5using System.Data;
  6using System.Windows.Forms;
  7using WGSys.DataExchange;
  8using WGSys.DataExchange.WGService;
  9
 10namespace WGSys.WGCtrlLib
 11{
 12    /// <summary>
 13    /// Summary description for CtrlPrint.
 14    /// </summary>

 15    public class CtrlPrint : System.Windows.Forms.UserControl
 16    {
 17        /// <summary> 
 18        /// Required designer variable.
 19        /// </summary>

 20        private System.ComponentModel.Container components = null;
 21        private System.Windows.Forms.Label label1;
 22        WGSys.DataExchange.WGProxy svc = new WGSys.DataExchange.WGProxy();
 23        public CtrlPrint()
 24        {
 25            // This call is required by the Windows.Forms Form Designer.
 26            InitializeComponent();
 27
 28            // TODO: Add any initialization after the InitializeComponent call
 29
 30        }

 31        private System.Drawing.Printing.PrintDocument printDoc;
 32        Component Designer generated code
 63
 64        变量销毁
 80
 81        判断是否安装打印机
140
141
142        测试控件
153    }

154}
页面引用的代码如下
 1<OBJECT id="CtrlPrint" style="WIDTH: 80px; HEIGHT: 50px" height="32" width="32" 
 2                                            classid="http:../WGCtrlLib.dll#WGSys.WGCtrlLib.CtrlPrint" VIEWASTEXT>
 3</OBJECT>
 4<INPUT class="NormalButton" style="WIDTH: 80px; HEIGHT: 24px" onclick="test1();" type="button" value="测试1">
 5<INPUT class="NormalButton" style="WIDTH: 80px; HEIGHT: 24px" onclick="test2();" type="button" value="测试2">
 6<INPUT class="NormalButton" style="WIDTH: 80px; HEIGHT: 24px" onclick="test3();" type="button" value="测试3">
 7<SCRIPT language="javascript">
 8                                    function test1()
 9                                    {
10                                        try
11                                        {
12                                            alert(document.all["CtrlPrint"]);
13                                        }

14                                        catch(e)
15                                        {
16                                            alert(e.message);
17                                        }

18                                    }

19                                    function test2()
20                                    {
21                                        if(document.all["CtrlPrint"]=="WGSys.WGCtrlLib.CtrlPrint")
22                                        {
23                                            try
24                                            {
25                                                document.all["CtrlPrint"].ShowHelp();
26                                            }

27                                            catch(e)
28                                            {
29                                                alert(e.message);
30                                            }

31                                        }

32                                        else
33                                        {
34                                            alert("打印控件未能正确加载!");
35                                        }

36                                    }

37                                    function test3()
38                                    {
39                                        if(document.all["CtrlPrint"]=="WGSys.WGCtrlLib.CtrlPrint")
40                                        {
41                                            try
42                                            {
43                                                document.all["CtrlPrint"].HavePaperType("A4");
44                                            }

45                                            catch(e)
46                                            {
47                                                alert(e.message);
48                                            }

49                                        }

50                                        else
51                                        {
52                                            alert("打印控件未能正确加载!");
53                                        }

54                                    }

55
</SCRIPT>

这个程序正常情况下应该显示如图,点击“测试1”按钮后,弹出"WGSys.WGCtrlLib.CtrlPrint"



错误1控件不能正确加载,控件状态如下图,访问控件的时候脚本错误“拒绝访问”

这种情况往往是因为页面引用控件的位置不正确,比如本来应该是classid="http:../WGCtrlLib.dll#WGSys.WGCtrlLib.CtrlPrint"
却写成了classid="http:../WGCtrlLib2.dll#WGSys.WGCtrlLib.CtrlPrint",还有一种情况是Bin目录下边的Dll是不能直接引用的,所以这个控件不要放在bin下面,我是放在网站根目录下面的。

错误2控件加载,但是不能判断出具体类型,控件状态如下图

在脚本中测试 alert(document.all["CtrlPrint"]);的时候提示[object],说明页面已经判断出来这个控件了,但是不知道具体类型
产生这个错误的原因可能是classid里边的名称控件不正确,比如写成了classid="http:../WGCtrlLib.dll#WGSys.WGCtrlLib.CtrlPrint2"还有一种情况比较奇怪,如果你用了客户机器里边不存在的字体,控件也是这种状态,比如我控件上显示OK的字体用"Arial Black",如果客户机器上没有这个字体,控件同样是这种状态,不能正常加载。估计是MS的Bug...

错误3 控件在页面上彻底的不显示,连空白的地方都没有留
原因是你用.Net 1.1写的控件,客户机器上装的是.Net 2.0 估计还是MS的Bug,应该向下兼容才对啊。

错误4 无法验证发行者。您确定要运行此软件吗?

目前为止,只有一台机器每次加载控件的时候都提示这个错误。点击运行按钮后控件工作正常,但是很烦。
本来以为是Internet选项 -> 安全 -> 安全设置 里边的“运行未用Authenticode签名的组件”的设置问题,但是选择“启用”后仍然不起作用。并且选择“提示”后提示的窗口跟这个窗口是不同的。
提示的窗口应该如下

这个问题还没有解决,谁有办法请指教。
错误5 控件可能加载正常,运行某些方法的时候控件抛出“请求****类型的权限已失败”的异常?

这个可以到 管理工具->Microsoft .NET Framework 1.1 向导->调整.NET安全性 里边调节相应区域的安全级别
posted @ 2006-07-23 14:47  小墨的童鞋  阅读(3442)  评论(6编辑  收藏  举报