通过ASP.NET MVC 3中的PowerShell O365:抛出MicrosoftOnlineException

问题描述:

我有一个ASP.NET MVC 3应用程序,它使用PowerShell连接到Office 365以检索有关用户许可证的一些详细信息。通过ASP.NET MVC 3中的PowerShell O365:抛出MicrosoftOnlineException

代码本身工作在很多情况下:

  • 使用库的作品在我的机器上
  • 一段代码在我的本地IIS项目工程
  • 一段代码在LINQPad在LINQPad使用目标服务器

对图书馆工作和它不工作当然是唯一的地方,它真的应该工作:在我IS在目标服务器上。

调用Connect-MsolService cmdlet时,我总是得到一个异常。问题是Exception并没有告诉我任何事情。

异常类型是

Microsoft.Online.Administration.Automation.MicrosoftOnlineException

并且所述消息是

异常类型 'Microsoft.Online.Administration.Automation.MicrosoftOnlineException' 被抛出

其是相当无用的。

我在代码中使用的Office 365用户帐户始终是相同的。用于启动IIS的用户帐户也始终是相同的(本地系统)。

我将PowerShell代码执行封装在名为PowerShellInvoker的类中。其代码可以在here找到。

这里是连接到Office 365的代码:

var cred = new PSCredential(upn, password); 

_psi = new PowerShellInvoker("MSOnline"); 
_psi.ExecuteCommand("Connect-MsolService", new { Credential = cred }); 

没有例外的实际抛出,误差在管道的Error属性中找到。 (见PowerShellInvoker类的行50ff。)

问题是我不知道什么可能是错的,尤其是因为当我使用LINQPad时相同的代码工作。谷歌的搜索结果也无法帮助我。

服务器在Windows Server 2008 R2 Datacenter SP1上与IIS 7.5一起运行。

我找到了解决方案!

我不知道原因,但在目标服务器上,我的应用程序池的高级设置已设置为将用户配置文件加载到False。我把它改回True(这应该是默认值),并且它可以工作!

编辑:加载用户配置设置显然是默认自动由于安装了IIS 6.0管理器设置为FalseFalse是默认的行为,直到IIS 6.0。

+0

老实说,我甚至不能远程形容我是多么感激你居然回来了,并回答了这个问题。我花了2天的时间试图追踪这件事......认真地,我不能够感谢你! – Roloc 2013-03-23 20:50:04