博主 | 发布时间: 28. July 2010 15:36
一、页面和服务器控件处理
1、ASP.NET代码优化避免到服务器的不必要的往返行程
在某些情况下不必使用 ASP.NET 服务器控件和执行回发事件处理。例如,在 ASP.NET 网页中验证用户输入经常可在数据提交到服务器之前在客户端进行。通常,如果不需要将信息传递到服务器以进行验证或将其写入数据存储区,请避免使用导致到服务器的往返行程的代码,这样可以提高页的性能并改善用户体验。您也可以不执行整个往返行程,而是使用客户端回调从服务器中读取数据。
页面类实现ICallbackEventHandler接口,注册GetCallbackEventReference方法,也就是ajax的回调实现。
针对一次需要载入很多控件的页面(载入比较耗时的页面),我们可以使用ajax技术来达到一定的页面访问性能提升。
2、ASP.NET代码优化使用 Page 对象的 IsPostBack 属性来避免对往返行程执行不必要的处理
如果您编写处理服务器控件回发处理的代码,有时可能需要代码仅在首次请求页时执行,而不是每次回发时都执行。根据该页是否是响应服务器控件事件生成的,使用 IsPostBack 属性有条件地执行代码。
将仅需要首次请求页面时执行的代码放在IsPostBack条件中运行。
3、ASP.NET代码优化只在必要时保存服务器控件视图状态
自动视图状态管理使服务器控件可以在往返行程中重新填充它们的属性值,而您不需要编写任何代码。但是,因为服务器控件的视图状态在隐藏的窗体字段中往返于服务器,所以该功能影响性能。了解在哪些情况下视图状态会有所帮助,在哪些情况下它影响页的性能,这样是有帮助的。例如,如果您将服务器控件绑定到每个往返行程上的数据,因为控件的值会在数据绑定期间用新值替换,所以保存的视图状态没有用处。在这种情况下,禁用视图状态可以节省处理时间并减少页的大小。
默认情况下,为所有服务器控件启用视图状态。若要禁用它,请将控件的 EnableViewState 属性设置为 false。
还可以使用 @ Page 指令禁用整个页的视图状态。当您不从页回发到服务器时,这将十分有用。
@ Control 指令中还支持 EnableViewState 属性以指定是否为用户控件启用视图状态。
查看视图状态的方法:
若要分析服务器控件在页中使用的视图状态的大小,请通过将 trace="true" 属性包含在 @ Page 指令中启用对该页的跟踪。然后在跟踪输出中,查看“控件层次结构”表的“Viewstate”列。
下面情况基本上可以禁用viewstate:
(1)页面控件 (.ascx)
(2)页面不回传给自身。
(3)无需对控件的事件处理。
(4)控件没有动态的或数据绑定的属性值(或对于每个postpack都在代码中处理)
4、ASP.NET代码优化除非有特殊的原因要关闭缓冲,否则使其保持打开状态
禁用 ASP.NET 网页的缓冲会导致大量的性能开销。
5、ASP.NET代码优化Server.Transfer和Response.Redirect的选择
Response.Redirect 简单地告诉浏览器访问另一个页面。Server.Transfer 有利于减少服务器请求,保持地址栏 URL 不变,允许你将 query string 和 form 变量传递到另一个页面,可以隐藏url中传递的参数。
Response.Redirect可以跨站点跳转,Server.Transfer只能同站点跳转。
微软ASP.NET代码优化建议:
使用 Transfer Server 对象或跨页发送的方法在同一个应用程序中的不同 ASP.NET 页之间重定向
如无特殊要求,应优先选择Server.Transfer进行页面跳转
ASP.NET代码优化二、数据访问
1、ASP.NET代码优化将 SQL Server 和存储过程用于数据访问
在 .NET Framework 提供的所有数据访问方法中,使用 SQL Server 进行数据访问是生成高性能、可缩放 Web 应用程序的推荐选择。使用托管 SQL Server 提供程序时,可通过尽可能使用编译的存储过程而不是 SQL 命令获得额外的性能提高。
(仅针对数据库选择SQL Server,数据库为其他的可以忽略此选项)
2、ASP.NET代码优化将 SqlDataReader 类用于快速只进数据游标
SqlDataReader 类提供了从 SQL Server 数据库检索的只进数据流。如果您可以在 ASP.NET 应用程序中使用只读流,则 SqlDataReader 类提供比 DataSet 类更高的性能。SqlDataReader 类使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。例如,当绑定到 SqlDataSource 控件时,通过将 DataSourceMode 属性设置为 DataReader,您将获得更好的性能。(使用数据读取器会导致某些功能的丢失。)另外,SqlDataReader 类实现 IEnumerable 接口,该接口也使您可以将数据绑定到服务器控件。
(仅针对数据库选择SQL Server,数据库为其他的可以忽略此选项) MySql中对应MySqlDataReader,根据需要选择。
3、ASP.NET代码优化尽可能缓存数据和页输出
ASP.NET 提供了一些机制,它们会在不需要为每个页请求动态计算页输出或数据时缓存这些页输出或数据。另外,通过设计要进行缓存的页和数据请求(特别是在站点中预期将有较大通讯量的区域),可以优化这些页的性能。与使用 .NET Framework 的任何其他功能相比,适当地使用缓存可以更好地提高站点的性能。
在使用 ASP.NET 缓存时,应注意以下事项。首先,不要缓存太多项。缓存每个项都有内存开销。不要缓存容易重新计算和很少使用的项。其次,给缓存项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转,并且会导致额外的代码清除和垃圾回收工作。使用与“ASP.NET Applications”性能对象关联的“Cache Total Turnover Rate”(缓存总流通率)性能计数器,您可以监视缓存中由于项到期而导致的周转。高周转率可能说明存在问题,特别是当项在到期前被移除时。(这种情况有时称作内存压力。)
可以考虑把静态的、变化不大的或者不经常变化需要动态加载的内容放入控件中,使用缓存技术。
﹤%@ OutputCache Duration="100" VaryByParam="none" %﹥
4、ASP.NET代码优化适当地使用 SQL 缓存依赖项
ASP.NET 同时支持基于表的轮询和查询通知,具体取决于所使用的 SQL Server 的版本。所有 SQL Server 版本都支持基于表的轮询。在基于表的轮询中,如果表中的任何内容发生更改,所有侦听器都会失效。这可能导致应用程序中不必要的改动。建议不要将基于表的轮询用于具有许多频繁更改的表。例如,建议将基于表的轮询用于很少更改的目录表。建议不要将基于表的轮询用于订单表,订单表具有更频繁的更新。SQL Server 2005 支持查询通知。查询通知支持特定查询,从而减少在表更改时发送的通知数量。虽然它比基于表的轮询提供更好的性能,但是它无法扩展到适应数千个查询。
(仅针对数据库选择SQL Server,数据库为其他的可以忽略此选项)
5、ASP.NET代码优化使用数据源分页和排序而不是 UI(用户界面)分页和排序
DetailsView 和 GridView 等数据控件的 UI 分页功能可用于支持 ICollection 接口的任何数据源对象。对于每个分页操作,数据控件查询数据源的整个数据集并选择要显示的行,并放弃其余的数据。如果数据源实现 DataSourceView 并且 CanPage 属性返回 true,则数据控件将使用数据源分页而不是 UI 分页。在这种情况下,数据控件仅查询每个分页操作需要的行。因此,数据源分页比 UI 分页更高效。只有 ObjectDataSource 数据源控件才支持数据源分页。若要在其他数据源控件上启用数据源分页,必须从该数据源控件继承并修改其行为。
6、ASP.NET代码优化平衡事件验证的安全性受益和性能开销
从 System.Web.UI.WebControls 和 System.Web.UI.HtmlControls 类派生的控件可以验证事件是否源自该控件所呈现的用户界面。这样有助于防止控件响应伪造的事件通知。例如,DetailsView 控件可以防止 Delete(删除)调用(控件中本质上不支持该调用)的处理以及被操纵而删除数据。此验证会带来一定的性能开销。可以使用 EnableEventValidation 配置元素和 RegisterForEventValidation 方法控制此行为。验证的开销取决于页上的控件数量,并在几个百分点范围内。
强烈建议不要禁用事件验证。在禁用事件验证之前,应该确保不会构造任何可能对应用程序具有意外影响的回发。
7、ASP.NET代码优化,除非必要,否则避免使用视图状态加密
视图状态加密会阻止用户能够读取隐藏视图状态字段中的值。典型情况是在 DataKeyNames 属性中带有一个标识符字段的 GridView 控件。标识符字段是协调对记录的更新所必需的。由于不想要标识符对用户可见,因此可以加密视图状态。但是,加密对于初始化具有恒定的性能开销,并具有取决于被加密的视图状态大小的附加开销。加密为每次页加载而设置,因此在每次页加载时都会发生相同的性能影响。
8、ASP.NET代码优化使用 SqlDataSource 缓存、排序和筛选
如果 SqlDataSource 控件的 DataSourceMode 属性设置为 DataSet,则 SqlDataSource 能够缓存查询产生的结果集。如果以这种方式缓存数据,则控件的筛选和排序操作(使用 FilterExpression 和 SortParameterName 属性进行配置)将使用缓存的数据。在许多情况下,如果缓存整个数据集,并使用 FilterExpression 和 SortParameterName 属性进行排序和筛选,而不是使用带“WHERE”和“SORT BY”子句的 SQL 查询(对于这些查询,每个选择操作都要访问数据库),应用程序会运行得更快。
e453d767-6795-4f5c-a6eb-06a45b8bf3a1|0|.0
博主 | 发布时间: 21. July 2010 14:05
#1 - 复制或删除一行代码时,没必要先选择它。
如果你想复制一行代码,你只需要简单的按CTRL+c拷贝,然后按CTRL+v粘贴这行就可以了,而不需要选择整行的代码。如果你想删除一行代码,只需按CTRL+x就可以了。CTRL+x与Delete相比,其优势在于给我们提供了一次后悔的机会。
#2 - 使用CTRL+.(CTRL+小数点)来自动添加命名空间
在 Visual Studio 2008 代码编辑中,你敲入一个类的名字,但是该类的命名空间在当前文件中没有被导入,那么 Visual Studio 会在这个名字下面显示一个小红条(见图1)。此时你可以使用CTRL+.或者使用Shift+Alt+F10来显示一个对话框导入正确的命名空间(见图 2)。
(图1)
(图2)
#3 - 永远不要手工创建properties
如(图3)的property,不需要手工一个字一个字的敲入,只需 prop+TAB+TAB (敲入prop,然后按两次TAB键)。然后按TAB键在参数之间切换,按回车键完成property的创建。
(图3)
#4 - 删除多余的using指令,并且排序
当 我们新一个类的时候,Visual Studio 会将常用的命名空间using在类的头部。但是在我们写完一个类的时候,有些using是多余的,删除多余的using,再排一下序,可以使代码看起来更 清晰。Visual Studio 2008 已经为我们做好了这一切。在代码编辑区点击右键,可以看到“组织 using”菜单,这就是我们需要的了。
(见图4)
#5 - 使用CTRL+k+c注释代码
如果你想临时想禁用一段代码,你可以把这段代码注释掉,方法是:先选择这段代码,然后CTRL+k+c(按住CTRL键不放,然后,按一下k键,再按一下c键),见(图5)(图6)。使用CTRL+k+u可以取消注释。
(图5)
(图6)
#6 - 你可以关掉所有文档窗口,除了当前这个。
我们经常会在Visual Studio中打开多个文档窗口,这时可以使用CTRL+TAB组合键方便的在不同的窗口之间切换。然而如果我们打开了太多的窗口,使用CTRL+TAB就会变的很困难。
这时有两个方法可以关掉打开的文档窗口。一个是通过“窗口”菜单的“关闭所有文档”。另一个更好的方法是,在当前文档窗口的标签上点击右键,然后选择“除此之外全部关闭”(见图7)。
(图7)
#7 - 在App_Data目录中双击数据库文件打开数据库
其实这个算不上是技巧了,很多朋友都有意或无意的这样用着。
#8 - 通过拖拽复制文件或目录到我们项目中
有时候我们会在新的解决方案中使用到以前的项目,原来我们的方法是,在解决方案上点右击,然后选择“添加”->“现有项目”,但是这种方法太慢了。有没有更快捷的方法呢?答案是肯定的,直接将文件或目录拖拽到“解决方案资源管理器”,OK,就么简单。
#9 - 使用CTRL+空格进行自动完成
这个方法对老外来说太体贴了,但是我们国内的朋友一般使用CTRL+空格来进行输入法的开/关。这里就不细说了。
#10 - 使用CTRL+n或CTRL+SHIFT+a创建新项
在 执行一个操作的时候,一般来说,使用鼠标是会比使用快捷键要慢一些的。比如在项目中添加新项,可以使用CTRL+n或是CTRL+SHIFT+a,前一个 用于ASP.NET Web站点,后一个用于ASP.NET MVC Web Application。从CTRL+n或CTRL+SHIFT+a开始养成使用快捷键的习惯吧!
#11 - 在新建文件时,不需要填写文件扩展名。
接着上一个技巧,通过快捷键添加新项时,会打开一个对话框(见图8)。可以通过使用TAB键和方向键来导航焦点,当焦点切换到“name”时,你填写的新项名字可以不包含文件扩展名。因为Visual Studio将根据我们选择的模板为我们加上扩展名。
f13c0337-29a8-4f10-86ff-5bdc3f9f34ca|1|5.0
博主 | 发布时间: 2. July 2010 10:05
对.net系统,需要将一些配置信息存储在web.cofnig中,有时会涉及到一些敏感信息,比如数据库的连接字符串,为了安全,我们需要对敏感信息进行加密。
ASP.NET 2.0里提供了一个工具aspnet_regiis,可以用它来进行加密。
举例:
aspnet_regiis -pe "connectionStrings" -app "/SampleApplication" –prov RsaProtectedConfigurationProvider
以上是加密配置节中的connectionStrings信息。
以下是对aspnet_regiis参数的详解:
-pd section
对配置节进行解密。此参数采用下面的可选参数:
· -app virtualPath 指定应该在包含路径的级别进行解密。
· -location subPath 指定要解密的子目录。
· -pkm 指定应该对 Machine.config 而非 Web.config 文件进行解密。
-pdf section webApplicationDirectory
对指定物理(非虚拟)目录中的 Web.config 文件的指定配置节进行解密。
-pe section
对指定的配置节进行加密。此参数采用下面的可选修饰符:
· -prov provider 指定要使用的加密提供程序。
· -app virtualPath 指定应该在包含路径的级别进行加密。
· -location subPath 指定要加密的子目录。
· -pkm 指定应该对 Machine.config 而非 Web.config 文件进行加密。
-pef section webApplicationDirectory
对指定物理(非虚拟)目录中的 Web.config 文件的指定配置节进行加密。
以上的操作是需要在服务器上进行的,如果我们用的是虚拟主机,就行不通了,需要以下的办法:
Configuration config = Configuration.GetWebConfiguration(Request.ApplicationPath);
ConfigurationSection section = config.Sections["connectionStrings"];
section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");;
config.Update ();
现在, 使用受保护配置对连接字符串值进行加密的配置文件不以明文形式显示连接字符串,而是以加密形式存储它们,如下面的示例所示:
<configuration>
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>RSA Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>RXO/zmmy3sR0iOJoF4ooxkFxwelVYpT0riwP2mYpR3FU+r6BPfvsqb384
pohivkyNY7Dm4lPgR2bE9F7k6TblLVJFvnQu7p7d/yjnhzgHwWKMqb0M0t
0Y8DOwogkDDXFxs1UxIhtknc+2a7UGtGh6D
i3N572qxdfmGfQc7ZbwNE=
</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>KMNKBuV9nOid8pUvdNLY5I8R7BaEGncjkwYgshW8ClKjrXSM7zeIRmAy/
cTaniu8Rfk92KVkEK83+UlQd+GQ6pycO3eM8DTM5kCyLcEiJa5XUAQv4KITBNBN6fBXs
WrGuEyUDWZYm6Eijl8DqRDb
11i+StkBLlHPyyhbnCAsXdz5CaqVuG0obEy2xmnGQ6G3Mzr74j4ifxnyvRq7levA2sBR4lhE5M
80Cd5yKEJktcPWZYM99TmyO3KYjtmRW/Ws/XO3z9z1b1KohE5Ok/YX1YV0+Uk4/yuZo
0Bjk+rErG505YMfRVtxSJ4ee418
ZMfp4vOaqzKrSkHPie3zIR7SuVUeYPFZbcV65BKCUlT4EtPLgi8CHu8bMBQkdWxOnQEIBeY+
TerAee/SiBCrA8M/n9bpLlRJkUb+URiGLoaj+
XHym//fmCclAcveKlba6vKrcbqhEjsnY2F522yaTHcc1+
wXUWqif7rSIPhc0+
MT1hB1SZjd8dmPgtZUyzcL51DoChy+hZ4vLzE=
</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
9b4418f7-9bbb-46a2-a7c9-9b2e199bd7f8|0|.0
博主 | 发布时间: 23. June 2010 13:01
在asp中,出现下列错误提示:
Microsoft VBscrīpt 运行时错误 错误 '800a01ad'
ActiveX 部件不能创建对象
这个错误是asp组件未注册,而导致。解决方法如下:
1、如果是你自己开发的组件,请使用
regsvr32 路径/组件.dll 进行注册。
2、可能是IIS自带的常用组件,由于系统问题、或杀毒等原因,导致组件出现问题,则请用下列两个cmd命令试一下。
regsvr32 scrrun.dll
重新注册FSO文件管理。
regsvr32 "C:\Program Files\Common Files\System\ado\msado15.dll"
重新注册ADODB.Stream组件
如果上述两法仍未解决,则可能是其它原因,不仿试试下面bat批处理代码。将下面代码复制到记事本,另存为 cmd.bat,双击运行就可以了。
echo 正在修复,这个过程可能需要几分钟,请稍候……
rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%\System32\dacui.dll
rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%\Catroot\icatalog.mdb
regsvr32 /s comcat.dll
regsvr32 /s asctrls.ocx
regsvr32 /s oleaut32.dll
regsvr32 /s shdocvw.dll /I
regsvr32 /s shdocvw.dll
regsvr32 /s browseui.dll
regsvr32 /s browseui.dll /I
regsvr32 /s msrating.dll
regsvr32 /s mlang.dll
regsvr32 /s hlink.dll
regsvr32 /s mshtml.dll
regsvr32 /s mshtmled.dll
regsvr32 /s urlmon.dll
regsvr32 /s plugin.ocx
regsvr32 /s sendmail.dll
regsvr32 /s mshtml.dll /i
regsvr32 /s scrobj.dll
regsvr32 /s corpol.dll
regsvr32 /s jscrīpt.dll
regsvr32 /s msxml.dll
regsvr32 /s imgutil.dll
regsvr32 /s cryptext.dll
regsvr32 /s inseng.dll
regsvr32 /s iesetup.dll /i
regsvr32 /s cryptdlg.dll
regsvr32 /s actxprxy.dll
regsvr32 /s dispex.dll
regsvr32 /s occache.dll
regsvr32 /s iepeers.dll
regsvr32 /s urlmon.dll /i
regsvr32 /s cdfview.dll
regsvr32 /s webcheck.dll
regsvr32 /s mobsync.dll
regsvr32 /s pngfilt.dll
regsvr32 /s licmgr10.dll
regsvr32 /s hhctrl.ocx
regsvr32 /s inetcfg.dll
regsvr32 /s trialoc.dll
regsvr32 /s tdc.ocx
regsvr32 /s MSR2C.DLL
regsvr32 /s msident.dll
regsvr32 /s msieftp.dll
regsvr32 /s xmsconf.ocx
regsvr32 /s ils.dll
regsvr32 /s msoeacct.dll
regsvr32 /s wab32.dll
regsvr32 /s wabimp.dll
regsvr32 /s wabfind.dll
regsvr32 /s oemiglib.dll
regsvr32 /s directdb.dll
regsvr32 /s inetcomm.dll
regsvr32 /s msoe.dll
regsvr32 /s oeimport.dll
regsvr32 /s msdxm.ocx
regsvr32 /s dxmasf.dll
regsvr32 /s laprxy.dll
regsvr32 /s l3codecx.ax
regsvr32 /s acelpdec.ax
regsvr32 /s mpg4ds32.ax
regsvr32 /s danim.dll
regsvr32 /s Daxctle.ocx
regsvr32 /s lmrt.dll
regsvr32 /s datime.dll
regsvr32 /s dxtrans.dll
regsvr32 /s dxtmsft.dll
regsvr32 /s wshom.ocx
regsvr32 /s wshext.dll
regsvr32 /s vbscrīpt.dll
regsvr32 /s scrrun.dll mstinit.exe /setup
regsvr32 /s msnsspc.dll /SspcCreateSspiReg
regsvr32 /s msapsspc.dll /SspcCreateSspiReg
echo.
echo.
echo 修复成功!任意键退出!
pause>nul
案例:
以下是无组件上传upload.asp页面的部分代码:
Set Form = Server.CreateObject ("scrīpting.Dictionary")
Form.CompareMode = 1
Set File = Server.CreateObject ("scrīpting.Dictionary")
File.CompareMode = 1
'A处
Set tStream = Server.CreateObject ("ADODB.Stream")
Set ōUpFileStream = Server.CreateObject ("ADODB.Stream")
'B处
整个程序以前均可用,但后来由于计算机染毒,重装系统并杀毒之后,发现这个页面程序出现
Microsoft VBscrīpt 运行时错误 错误 '800a01ad'
ActiveX 部件不能创建对象
错误,使用
response.write "zuoyefeng调试"
response.end
放在A处和B处调试,发现是
Set tStream = Server.CreateObject ("ADODB.Stream")
这块的问题。可见,是组件的问题,于是使用上面命令重注了一上,OK,问题解决了。
f5aae4f1-65d9-491a-b509-bd5517b66359|0|.0
博主 | 发布时间: 28. May 2010 16:10
因为公司服务器都已经做成了windows server 2003 x64 sp2,以前用的都是32位系统也遇不到这些新问题,现在彻底被64位系统整晕了。
公司接了一个虚拟主机的业务,需要部署ASP站点,以为很轻松IIS开个站点就完事了,可是却发现了这么一个错误:
脚本超时
/index.asp
超过了脚本运行的最长时间。可以为 Server.ScriptTimeOut 属性指定新值或更改 IIS 管理工具中的相应值来更改此限制。
四处搜索,都是说修改超时值,都是本机调用这超时肯定是不可能的,只能是死循环造成的,仔细查看conn.asp文件,发现有一句代码:
on error resume next
这句代码的意思遇到错误不停下来,继续往下执行。这也就是死循环的症结所在了,于是去掉此句代码,重新打开网站,有发现这个错误:
ADODB.Connection 错误 '800a0e7a'
未找到提供程序。该程序可能未正确安装。
/conn.asp,行6
又上网找资料,才发现是由于OLEDB没有64位的驱动,所以,在X64操作windows server中,常出现ASP/ASPX与ACCESS连接报错的情况:
The ‘Microsoft.Jet.Oledb.4.0′ provider is not registered on the local machine.
找到解决办法:
IIS7设置,选中进程池,右键,选择“高级设置”,“启用32位应用程序”为True
也可以使用下面的命令行:
IIS7:
运行:
cd c:\windows\syswow64\inetsrv\
appcmd list apppool /xml | appcmd set apppool /in /enable32BitAppOnWin64:true
如果是Windows 2003 X64中的IIS6,则运行下面的命令行:
IIS6:
运行:cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
运行之后,错误信息有变了,变为“不可用服务”
仔细看了一下,下面还有一段话没有看完
另外:网上还提到如果运行了asp.net模块当iis以32为方式运行时也必须加载32的asp.net扩展,否则iis无法正常运行,因为64位的IIS无法加载32位的ASP.Net模块,32位的IIS也无法加载64位的ASP.Net模块.
在64位Windows的IIS上开启32位程序支持(zz)
经常碰到32位的DLL什么的不能在64位Windows的IIS上调用,在网上找到这篇文章也许能够解决很多问题。总的思路就是先允许IIS支持32位程序,然后再用.Net Framework注册IIS。 Enable 32-bit Server Applications on 64-bit Machines ASP.NET applications that use TX Text Control .NET Server must be compiled for 32-bit platforms (see this article). IIS must be configured to execute these 32-bit applications. Generally, all applications will be executed in 64-bit mode. 1. Enable IIS's 32-bit support Open a command prompt and type in the following command: cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1 This command enables the 32-bit mode in IIS. 2. Install the IIS 32-bit extensions Open a command prompt and type the following command: %SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i This command installs the 32-bit web extensions for .NET Framework 2.0. 3. Activate .NET Framework 2.0 32-bit in IIS In the IIS-Manager, select the 'ASP.NET v2.0.50727 (32bit)' in the 'Web Service Extensions' panel and check 'allow' to activate it. 4. Restart the IIS by opening a command prompt: iisrestart
原来还要注册一下framework,运行一下
%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
然后容许32位的framework运行就可以了
3d84dd08-1d1c-4a08-8d85-00f8d229f58f|0|.0