提问人: 提问时间:11/7/2008 最后编辑:Elias Nicolas 更新时间:9/26/2015 访问量:1412
部署到 IIS 时 ASP.NET 应用程序中断
ASP.NET application breaks when deploying to IIS
问:
我正在开发一个用于在线购物的小型 ASP.NET 网站,在 Visual Studio 中测试它时,一切正常,但是当我将其部署到 IIS 时,情况不再如此。
问题似乎出在我引用的DLL文件中,此DLL文件包含我需要初始化并向具有所有产品信息的另一台服务器发送查询请求的类。这个DLL最初是一个Jar文件,我使用IKVM将其转换为DLL。
当我将应用部署到 IIS 时,尝试实例化该 DLL 中定义的对象的任何页面都会失败,并显示 null 引用,例如:
Fulfiller fulfiller = new Fulfiller();
string result = fulfiller.initialize("host", port, "user", "pass");
返回以下错误:
System.NullReferenceException
:对象引用未设置为实例 对象。在 at atFulfiller.toLog(String )
Fulfiller.initialize(String str1, Int32 i, String str2, String str3)
Orders.createDataSource()
现在再说一次,这在 VS 开发服务器上完美运行,但在 IIS 中中断,我不知道为什么。在IIS上运行时DLL未正确加载的某种编码问题吗?或者是IIS的问题可能会阻止DLL执行或发送请求,我非常迫切地想解决这个问题
谢谢
答:
什么是履行者。initialize() 在做什么?你能发布那个代码吗?
显然,您有一个 fulfiller 引用,因为您不能在没有错误的情况下传递构造函数,然后有一个 null-ref。
通常,当在开发服务器上运行的某些内容在 IIS 上不起作用时,问题在于授权(VS 服务器在您的凭据下运行,但 IIS 以“网络服务”或其他系统用户身份运行)。
例如,我在 fulfiller.toLog() 上看到您的代码中断。
可能是 toLog() 函数正在尝试打开日志文件,而 IIS 模拟的用户无权读取或写入该文件?
我赞同洛里斯的回答。
开发服务器具有您的权限。假设要部署到 Windows Server 或任何运行 Active Directory 的计算机,则应该能够右键单击存储日志文件的目录并选择属性。在对话框中,将有一个标记为“安全性”的选项卡。如果网络服务用户(或IUSR_machinename)不可见,则必须将其添加到列表中。选择用户并为其分配读取和写入权限。
不要授予 IIS 用户对整个应用程序目录的完全权限。这是一个巨大的安全漏洞,因此默认部署不会为您提供当前所需的权限。
我没有使用过 IKVM,但我确信必须在服务器上安装一些 IKVM 运行时。您是否检查过服务器上的 IKVM?
希望这会有所帮助。
评论