我有一个ASP.NET网站,可以在家用电脑上完美运行。但是当我从我的主机提供商处运行它时,情况就不那么好了我需要在我的代码后面调用一个COM DLL。本地IIS7总是找到DLL,在我的DLL导入属性中指定为“C:\ MyDLL.dll”。问题是,每当调用我的DLL的代码执行时,页面上都没有任何反应。好像代码永远不会执行?因此,为了在我的最终确定问题,我承诺在家中设置Win2k8服务器,运行IIS7,以复制我的主机提供商环境。花了一段时间来计算如何将我的网站带入IIS7,但今天,我终于可以让我的网站执行。但!我期待更好的伐木?似乎登录IS7的程度仅限于记录哪些页面加载以及何时加载? :(
我还没有挖掘追踪。这可能是我的下一个选项,但我想知道“Handler Mappings”是否可以做任何事情来帮助加载我的COM DLL?可能是一个许可的事情吗?
答案 0 :(得分:0)
这里有一个类似的问题,有些技术可以帮助您排除故障: Web service works in asp.net but not IIS
即:
答案 1 :(得分:0)
根据user2731610的建议,我使用ProcessMonitor检查ASP进程工作者是否完全访问了我的DLL。 ProcessMonitor显示已找到DLL,并且正确地“创建”并“打开”和“查询内部”但是在此之后什么都没发生过?
我在我的DLL上使用了DependencyWalker,发现在myDLL.dll中引用了NT.dll和Kernel32.dll。我推断,或许,myDLL.dll需要驻留在与其他两个DLL相同的相同的位置?所以我将myDLL移动到C:\ Windows \ System32,以及C:\ Windows \ SysWOW64。为什么不?我决定在这两个地方放一份副本,以防万一。因为我记得,当我早些时候运行ProcessMonitor时,ASP系统地查询了多个搜索我的DLL的位置?可能是PATH声明中包含的所有位置?是不是很复杂......
DependencyWalker在我的DLL中显示3个条目。首先,Kernel32.DLL,CPU = x64。第二,NTDLL.DLL,CPU = x64。第三,myDLL,CPU = x86。不同的CPU“类型”被DependencyWalker标记为“具有不同CPU类型的模块”?我相信myDLL编译为32位,而Kernel32和NTDLL编译为64位。不过,这似乎并不重要。
在安全性下,我添加了IIS_IUSRS用户并完全控制了它。此设置可能没有区别,但在尝试诊断问题的过程中,它可能是一个候选人。
最后,我想说我在这个问题上花了太多时间,并且我在网上寻求帮助。我感到沮丧的是,在我偶然发现的所有文章和帖子中,没有真正清楚说明发生了什么。我猜COM被认为是旧技术,新资源将用于管理解决方案。
这是漫长而令人沮丧的研究的结束。我无法看到隧道尽头的光线,并且即将诅咒微软。感谢您的帮助和耐心。