C# ASP.Net和Console之间的执行差异

C# ASP.Net和Console之间的执行差异,c#,asp.net-mvc-3,console-application,environment,C#,Asp.net Mvc 3,Console Application,Environment,我写的ASP.NETMVC3应用程序有问题。该应用程序基本上由两个程序集组成,一个用于UI的MVC3应用程序和一个包含业务逻辑的基础结构DLL 基础架构程序集还引用了软件供应商提供的一些程序集,我认为这些程序集是互操作程序集,封装了同一供应商提供的某些COM组件的功能。基础设施asembly对互操作程序集进行多次调用,以执行应用程序的各种功能 当我在我的开发机器(Win7)上运行visualstudio中的MVC应用程序时,它工作得非常好。然后,我将应用程序部署到预期的web服务器(Win2k3

我写的ASP.NETMVC3应用程序有问题。该应用程序基本上由两个程序集组成,一个用于UI的MVC3应用程序和一个包含业务逻辑的基础结构DLL

基础架构程序集还引用了软件供应商提供的一些程序集,我认为这些程序集是互操作程序集,封装了同一供应商提供的某些COM组件的功能。基础设施asembly对互操作程序集进行多次调用,以执行应用程序的各种功能

当我在我的开发机器(Win7)上运行visualstudio中的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)
奇怪的是,互操作程序集中的所有其他调用都可以正常工作。只是这一次失败了

我还为供应商的应用程序在测试环境中将我的MVC应用程序部署到web服务器上。据我所知,OS/IIS/.Net/等的配置在两台服务器上都是相同的。MVC应用程序可以在该服务器上完美运行

我尝试过使用网络监视器和进程监视器进行调试,但没有明显的结果

今天,我创建了一个控制台应用程序,以执行基础结构程序集,从而使ASP.Net不再适用。Console应用程序在我的开发机器和目标服务器上都能完美工作

所以我的问题是:除了显而易见的区别之外,ASP.Net和控制台应用程序在执行环境上有什么区别

我想到的一个是用户上下文。MVC应用程序生成的日志的所有者是“网络服务”,但我显然是在用自己的帐户运行控制台应用程序。不过,这并不能解释这两台服务器上操作的差异


除了联系供应商(通常没有什么帮助),我还应该看什么?

这几乎肯定是一个权限问题

堆栈跟踪引用中的类

Baa.Smarteam.SecurityManager
命名空间。正如您正确指出的,您的MVC应用程序作为网络服务运行(默认情况下),而您的控制台应用程序在您的登录帐户下运行(同样,默认情况下)

如果在测试服务器上工作正常,则是因为网络服务已被授予运行“Baa”代码的必要权限,或者是因为MVC应用程序未作为该框上的网络服务运行


考虑“Baa”应用程序可能尝试引用哪些安全资源(文件、注册表项等),并将工作服务器上这些资源的安全设置与出现故障的服务器上的设置进行比较。

尝试比较相关系统DLL的版本。有时微小的版本更改可能会导致重大差异。“Baa”名称空间是我的应用程序,据我所知,在所有环境中都是一样的。问题在于调用
SmarTeam.Std.Interop.SmarTeam.SmApplic.ISmObject.Inserte2()
。我理解你对权限的看法,我也有类似的想法,但我认为我能够在流程监视器捕获中看到这样的问题。我会继续找的,找到了。这确实是一个文件权限问题。谢谢