求助:WebSpere VS IE 时IE中运行.NET的Windows控件出现的问题

求助:WebSpere VS IE 时IE中运行.NET的Windows控件出现的问题
最近小弟搞一个工程,B/S的,比较的麻烦,需要将.net和j2ee联合使用
服务器是j2ee,使用什么阿法奇或汤姆猫之类的基于java的发布器,没有IIS ,
客户端为一个在IE中运行的一个使用c#编写的WindowsForm控件
网页内嵌一个控件自然又牵涉到控件的下载和自动更新
首先在要运行的机器上装了.NET框架1.1,进入,然后进入
[控制面板]-[管理工具]-[Microsoft .NET Framework 1.1 Configuration]
然后进入[我的电脑]-[运行库安全策略]-[计算机]-[代码组]-[All_Code]进入它的属性对话框
中,把它的[权限集]设为[FullTrus]

本来参考相关材料显示该控件的HTML页面代码为

 1<html>
 2<head>
 3<title>电子病历编辑器演示</title>
 4</head>
 5<body>
 6<object classid="DocumentLib.dll#TextDocumentLib.EditPanel" height="90%" id="mycontrol" viewastext="" width="100%">
 7</object>
 8<input onclick="init()" type="button" value="初始化"/>
 9</body>
10</html>

但将 documentlib.dll 拷贝到运行j2ee的服务器上,该页面不能正确显示,后觉得可能发布器有什么问题
于是自己编了个端口监听程序,分析出了差别,原来在于HTTP返回的contenttype有差别,
至于为什么有这个差别我就没深究了,我在服务器上加了一个JSP,文件名为 dll.jsp,代码如下
---------------------------------------------------------------------------------------------------

1@ page contentType="text/html; charset=GBK" 

try
{
com.haitai.emr.common.Debug.println("DLL.jsp");
response.setContentType("application/octet-stream"); //设置返回的文件类型
FileInputStream hFile = new FileInputStream(pageContext.getServletContext().getRealPath("/") + " \\DocumentLib.DLL "); // 以byte流的方式打开文件
System.out.println(pageContext.getServletContext().getRealPath("/") + " \\emrtext\\EMRTextDocumentLib.DLL ");
int i = hFile.available(); //得到文件大小
byte data[] = new byte[i];
hFile.read(data); //读数据
hFile.close();
ServletOutputStream toClient = response.getOutputStream(); //得到向客户端输出二进制数据的对象
toClient.write(data); //输出数据
toClient.flush();
toClient.close();
}
catch(IllegalStateException e){
e.printStackTrace();
}
catch(Throwable ext){
ext.printStackTrace();
}

1@ page import="java.lang.*" 

@ page import="java.util.*"

 1@ page import="java.io.*" 
 2```   
 3\----------------------------------------------------------------------------------------------------- 
 4
 5HTML代码变成了
 6```
 7<html>
 8<head>
 9<title>电子病历编辑器演示</title>
10</head>
11<body>
12<object classid="dll.jsp#TextDocumentLib.EditPanel" height="90%" id="mycontrol" viewastext="" width="100%">
13</object>
14<input onclick="init()" type="button" value="初始化"/>
15</body>
16</html>
17```
18结果页面能正确显示了 
19
20  
21现在出现的问题是这个页面打开时老是连接dll.jsp,估计是检查最新版本吧.我根据一些资料猜测可以在页面引用   
22应用程序配置文件来避免这个重复的操作.服务器上可以放置一个合适的 webconfig.xml ,HTML页面改成如下
23```
24<html>
25<head>
26<title>电子病历编辑器演示</title>
27<link href="webconfig.xml" rel="Configuration"/>
28</head>
29<body>
30<object classid="dll.jsp#TextDocumentLib.EditPanel" height="90%" id="mycontrol" viewastext="" width="100%">
31</object>
32<input onclick="init()" type="button" value="初始化"/>
33</body>
34</html>
35```
36可是我不知道如何编写这个webconfig.xml,我用 sn.exe makecert.exe signcode.exe 对那个控件搞了个强名称   
37,处理后的dll文件可以扔进Windows2000的assembly高速缓冲中,然后尝试的写了个如下的webconfig.xml ,可以好像没有用
38```
39<configuration>
40<runtime>
41<assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1">
42<dependentassembly>
43<assemblyidentity culture="neutral" name="DocumentLib" publickeytoken="4b96b5c6ae565d61"></assemblyidentity>
44<bindingredirect newversion="1.0.1803.26449"></bindingredirect>
45<codebase href="DocumentLib.dll" version="1.0.1803.26449"></codebase>
46</dependentassembly>
47</assemblybinding>
48</runtime>
49</configuration>
50```
51还有一个问题,在某些机器中,控件加载缓慢,仔细研究,发现程序在"System.Resources.ResourceManager.GetObject()"   
52中停留了很长时间,我还有一次定位到了"System.ConfigTreeParser.Parse(string , string , boolean )"上,   
53不知道是什么地域设置还是权限有什么问题或者其他原因.   
54  
55问题总结:   
561.如何对IE中运行的.netWindows控件进行自动下载和更新,最好靠个
57```
58<link href="webconfig.xml" rel="Configuration"/>
59```
60避免无意义的下载dll文件   
612.能不能不使用上面的 dll.jsp 而直接定向到 dll文件本身   
623.如何解决在某些机器中控件加载缓慢问题   
634.上面的发布器对文件名大小写敏感, DocumentLib.dll 和 DocumentLib.DLL是不同的, vs.net编译生成 dll ,而IE却老是   
64视图下载 DLL,害的我拷贝到服务器上时要改dll为DLL , 不知能不能少这点麻烦.
Published At
Categories with Web编程
Tagged with
comments powered by Disqus