0

我正在开发一个用于在线购物的小型 ASP.NET 网站,在 Visual Studio 中对其进行测试时,一切正常,但是当我将其部署到 IIS 时,情况不再如此。

问题似乎出在我引用的 DLL 文件中,该 DLL 文件包含我需要初始化的类并将查询请求发送到具有所有产品信息的另一台服务器。这个 DLL 最初是一个 Jar 文件,我使用 IKVM 将其转换为 DLL。

当我将应用程序部署到 IIS 时,尝试实例化在该 DLL 中定义的对象的任何页面都会失败并显示空引用,例如:

Fulfiller fulfiller = new Fulfiller();
string result = fulfiller.initialize("host", port, "user", "pass");

返回此错误:

System.NullReferenceException: 你调用的对象是空的。在Fulfiller.toLog(String )Fulfiller.initialize(String str1, Int32 i, String str2, String str3) _Orders.createDataSource()

现在再次,这在 VS 开发服务器上完美运行,但在 IIS 中中断,我不知道为什么。在 IIS 上运行时,DLL 没有正确加载是某种编码问题吗?还是 IIS 的问题,可能会阻止 DLL 执行或发送请求,我非常渴望解决这个问题

谢谢

4

4 回答 4

3

通常,当在开发服务器上工作的东西在 IIS 上不起作用时,问题是授权(VS 服务器在您的凭据下运行,但 IIS 作为“网络服务”或其他系统用户运行)。

例如,我看到您的代码在fulfiller.toLog() 上中断。

会不会是 toLog() 函数试图打开一个日志文件,而被 IIS 模拟的用户无权读取或写入它?

于 2008-11-07T15:11:51.007 回答
0

我没有使用过 IKVM,但我确信服务器上必须安装一些 IKVM 运行时。你检查过服务器上的 IKVM 吗?

希望这可以帮助。

于 2008-11-07T16:45:40.770 回答
0

我赞同洛里斯的回答。

开发服务器具有您的权限。假设您要部署到 Windows Server 或任何运行 Active Directory 的机器,您应该能够右键单击存储日志文件的目录并选择属性。在对话框中,将有一个标签为安全的选项卡。如果网络服务用户(或 IUSR_machinename)不可见,您必须将它们添加到列表中。选择用户并为其分配读写权限。

不要授予 IIS 用户对整个应用程序目录的完全权限。这是一个巨大的安全漏洞,因此默认部署不会为您提供当前所需的权限。

于 2008-11-07T15:23:08.737 回答
0

什么是fulfiller.Initialize() 在做什么?您可以发布该代码吗?

显然,您有一个实现者引用,因为您不能无错误地传递构造函数然后有一个空引用。

于 2008-11-07T15:04:19.757 回答