我编写的 ASP.Net MVC3 应用程序有问题。该应用程序基本上由两个程序集组成,一个用于 UI 的 MVC3 应用程序和一个包含业务逻辑的基础结构 DLL。
基础设施程序集还引用了软件供应商提供的一些程序集,我认为这些程序集是封装了同一供应商提供的某些 COM 组件功能的互操作程序集。基础结构程序集对 Interop 程序集进行了多次调用,以执行我的应用程序的各种功能。
当我在我的开发机器(Win7)上的 Visual Studio 中运行 MVC 应用程序时,它运行良好。然后我将应用程序部署到预期的 Web 服务器(Win2k3R2 上的 IIS 6),它可以正常启动,并且大部分功能都可以正常工作。然而,对供应商程序集的调用之一失败,出现以下神秘异常:
System.Runtime.InteropServices.COMException: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
at SmarTeam.Std.Interop.SmarTeam.SmApplic.ISmObject.InsertEx2(ISmBehavior Behavior)
at Baa.Smarteam.SecurityManager.Infrastructure.Smarteam.SmarteamAccountRepository.Create(UserAccountFromST smarteamAccount)
--- End of inner exception stack trace ---
at Baa.Smarteam.SecurityManager.Infrastructure.Smarteam.SmarteamAccountRepository.Create(UserAccountFromST smarteamAccount)
at Baa.Smarteam.SecurityManager.Infrastructure.UserAccountRepository.Create(IDualSourceUserAccount userAccount)
at Baa.Smarteam.SecurityManager.Infrastructure.UserManager.CreateUser(Int32 bemsId)
at Baa.Smarteam.SecurityManager.Web.Controllers.UserController.ProcessAction(Nullable`1 id, String actionName, Func`2 action)
奇怪的是,Interop 程序集中的所有其他调用都可以正常工作。只是这一个失败了。
我还在我们的测试环境中为供应商的应用程序将我的 MVC 应用程序部署到 Web 服务器上。据我所知,OS/IIS/.Net/etc。两台服务器上的配置相同。MVC 应用程序在此服务器上完美运行。
我已经尝试使用网络监视器和进程监视器进行调试,但没有出现任何明显的问题。
今天,我创建了一个控制台应用程序来练习基础结构程序集,从而将 ASP.Net 排除在外。控制台应用程序在我的开发机器和目标服务器上都能完美运行。
所以我的问题是:除了显而易见的,ASP.Net 和控制台应用程序之间的执行环境有什么区别?
我想到的一个是用户上下文。MVC 应用程序生成的日志的所有者是“网络服务”,但我显然是在自己的帐户下运行控制台应用程序。但是,这并不能解释两台服务器上的操作差异。
除了联系供应商(他们通常不太有帮助),我还应该看什么?