<% @ language="vbscript" %>
例:在dll中编译以下代码:
Option Explicit
Private Context As ScriptingContext
Private Application As Application
Private Response As Response
Private Request As Request
Private Session As Session
Private Server As Server
Public Sub OnStartPage(PassedscriptContext As ScriptingContext)
Set Context = PassedscriptContext
Set Application = Context.Application
Set Request = Context.Request
Set Response = Context.Response
Set Server = Context.Server
Set Session = Context.Session
End Sub
Public Sub showinfo()
Response.Write "asp编译DLL,不需要服务器上注册组件!"
End Sub
' 释放内部对象
Public Sub OnEndPage()
Set Application = Nothing
Set Request = Nothing
Set Response = Nothing
Set Server = Nothing
Set Session = Nothing
Set Context = Nothing
End Sub
在一般情况下,如我的dll放在了 d:/myweb/test.dll那么需要服务器注册:regsvr32 d:/myweb/test.dll
在ASP中使用时:
<%
Dim newtest
Set newtest=Server.CreateObject("类模块名称")
newtest.showinfo()
%>
在不注册组件的情况下,通常这样来使用:
<% @ language="vbscript" %>
<!--METADATA TYPE="typelib" FILE="d:/myweb/test.dll"-->
<%
Dim newtest
Set newtest=Server.CreateObject("类模块名称")
newtest.showinfo()
%>
以上用法就可以达到立即调用的目的。
为了保护程序代码的安全,编译DLL是个不错的选择。
主要的原因在于重新部署和访问权限的问题。如果你修改了DLL内容,那么你必须要将修改DLL发送到客户端,如果你的DLL改了文件名,你的客户端必须要更新所有调用它文件;而是用WCF就没有这样的问题,你只需要更新WCF就可以,
而将DLL直接部署到客户端,且这个DLL是和有访问限制的内容打交道的。即便你在DLL中设置的访问权限什么的。但你要知道,在客户机上运行的程序都是在客户机内存的,破解本地的数据要比黑掉服务器来的简单的多;并且,如果将DLL部署在客户端,那么就相当于所有的客户机都是直接于数据服务器相连的,为黑掉服务器打开了方便之门。
说白了,就和网络游戏的客户端和服务器一样的道理。为什么网游的客户端不直接连数据库处理,非得花大价钱用服务器,所谓的分布式计算不是很好么。道理就是这样的,一个是安全,一个方便更新和控制
使用全局程序集GAC关于GAC,复制点东西给你:
Gac就是C:\WINDOWS\assembly文件夹,中文叫全局程序集缓存,把dll放到这个文件夹里,bin下面就不用放dll了,目的是为了程序集共享。
如何把asp.net网站部署到Gac里面
首先在你Visual Studio的安装目录里找到sn.exe文件,放到cmd里执行
sn.exe -k C:\testKey.snk
这样就会在你C盘的目录下生成testKey.snk密钥文件
然后
VS2003
在网站项目的AssemblyInfo.cs里面的[assembly: AssemblyKeyFile("")]做类似如下配置
[assembly: AssemblyKeyFile(@"C:\testKey.snk
")]
注意这里写绝对路径最好,相对路径很难写
生成网站
这时网站的dll就是个强命名程序集,
打开程序---管理工具---.net framework1.1(或2.0)配置
我的电脑,程序集缓存,右键添加,把刚生成好的dll添加进去,无错的话就添加成功了。
这时你可以把自己bin目录下的dll删了,但这时网页还打不开,对webconfig做如下修改
<compilation
defaultLanguage="c#"
debug="true"
>
<assemblies>
<add assembly="youDllname, Version=1.0.2811.20076, Culture=neutral, PublicKeyToken=c52d31a7559027ce"/>
</assemblies>
</compilation>
至于assembly后面的dll全名怎么写,你可以用反编译工具Reflector.exe去查你的dll,也可以在.net framework1.1(或2.0)配置里面找到你的dll查属性得到。
配好后网页就应该可以打开了,如果打不开,重启下iis
VS2005
要麻烦一点,你生成好snk文件后,第一步,当你确定好网站程序不改了后,点网站发布,在发布里面用固定命名和单页程序集,和对预编译程序用强命名,下面有一个可以选择snk文件的按纽,把snk文件选进去,发布网站,
然后再用上面的方法把bin目录里面的dll加到Gac里面,这时可以把bin目录里面的dll删了。然后配制webconfig如下
<configuration>节点下
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="CE.EIP.CRMBusinessEntities" fullName="CE.EIP.CRMBusinessEntities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=C75F352AFF88DAD1"/>
</assemblyBinding>
</runtime>
这时网站应该可以运行。qualifyAssembly 在2005里面是通知运行时去Gac找dll的方法
基本上是这样,但你第一次很可能操作成功不了,所以要注意如下问题
webconfig永远是在你部署时修改,你要是在开发时修改就有错
当你都配制好后,要重启下iis,你更新dll的时候最好也重启下iis,为什么呢?
因为运行时是先去找C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files
下面的一个叫root 文件里面的dll,如果找到了,就不会去Gac里面找了,重启IIS的目的就是为了把里面的文件删除
并不是所有dll都可以放到Gac里面的,比如ajax.dll系列,因为这个dll会生成xml文档,dll在GAC里面,那xml会生成在哪里呢?所以凡是要生成xml文档的dll都不适合放进去(当然也有解决方案不过麻烦)
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)