IIS7处理程序映射

时间:2014-08-29 22:13:36

标签: asp.net dll iis-7 com loading

我有一个ASP.NET网站,可以在家用电脑上完美运行。但是当我从我的主机提供商处运行它时,情况就不那么好了我需要在我的代码后面调用一个COM DLL。本地IIS7总是找到DLL,在我的DLL导入属性中指定为“C:\ MyDLL.dll”。问题是,每当调用我的DLL的代码执行时,页面上都没有任何反应。好像代码永远不会执行?因此,为了在我的最终确定问题,我承诺在家中设置Win2k8服务器,运行IIS7,以复制我的主机提供商环境。花了一段时间来计算如何将我的网站带入IIS7,但今天,我终于可以让我的网站执行。但!我期待更好的伐木?似乎登录IS7的程度仅限于记录哪些页面加载以及何时加载? :(

我还没有挖掘追踪。这可能是我的下一个选项,但我想知道“Handler Mappings”是否可以做任何事情来帮助加载我的COM DLL?可能是一个许可的事情吗?

2 个答案:

答案 0 :(得分:0)

这里有一个类似的问题,有些技术可以帮助您排除故障: Web service works in asp.net but not IIS

即:

  • 本地服务器之间用户上下文的差异(不确定您使用的是哪个Web服务器...例如Visual Studio中的IIS Express?),以及IIS 7应用程序池上的进程标识。
  • ASP.NET中的信任级别,可以在计算机上配置。然而,听起来您正在与一家网络托管公司合作,该公司通常不允许网络应用以完全信任的方式运行(除非您有一个完整的VM)。
  • 在您的主服务器上,您可以检查Windows事件日志,并查看在触发代码时是否记录了正在写入的错误(例如,检查应用程序日志和安全日志)。此外,您可以尝试运行一个免费的SysInternals工具,如Process Explorer或Process Monitor(http://technet.microsoft.com/en-us/sysinternals/bb795533.aspx),它允许您实时查看计算机上资源的访问和失败。

答案 1 :(得分:0)

嗯,我会被诅咒。在我的电脑上,我将我宝贵的DLL放在“C:\ myDLL.DLL”中,它可以从VisualStudio2013中完美运行。只要我顽固地坚持将我的DLL放在我的测试Win2k8 64位服务器盒上的同一位置(为什么不呢?),运行IIS7,当我的C#试图在Internet Explorer中调用我的DLL函数时没有任何反应(或Firefox或Chrome)。没什么,nada,zilch,rien du tout :(

根据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被认为是旧技术,新资源将用于管理解决方案。

这是漫长而令人沮丧的研究的结束。我无法看到隧道尽头的光线,并且即将诅咒微软。感谢您的帮助和耐心。