Windows Azure ACS:无法找到程序集"Microsoft.IdentityModel"



我有一个ASP网络角色,它在没有ACS的情况下工作得很好。当我将ACS添加到我的应用程序中时,它在本地运行良好。然而,当我将其部署到云中时,它似乎并没有打包Microsoft.IdentityModel.dll。

现在我已经完成了以下操作:

  1. 在"Microsoft.IdentityModel"的复制local=true的引用中得到保证
  2. 厌倦了重新添加STS引用。3.右键单击>>添加引用>>Microsoft.IdentityModel.dll

这在过去也可以很好地工作,而无需在实际服务器上安装WIF。

有什么想法吗?

请查看这些资源,它们可能会帮助您解决问题:

  • 类似SO问题
  • MSDN文档:调用RoleEnvironmentAPI时找不到程序集"Microsoft.IdentityModel"
  • 来自Windows Azure团队的ACS演练(新)
  • GitHub上用于通过Stratup任务安装WIF的Powershell脚本

希望这能有所帮助!

我设法找到了问题的原因。所以我在同一个解决方案中有1个WebRole和1个WCF角色。在我尝试使用WCF服务的三个步骤之后,ACS一直运行良好。在这一点上,Azure为每个角色创建了一个VM,这让我印象深刻。所以,当我尝试使用WCF服务时,这就是为什么它的身份验证很好的原因。WebRole中没有缺少程序集,而是它创建的WCF VM中缺少程序集。因此,我确保WIF也安装在那个虚拟机上,并使其正常工作。我仍然不明白为什么我必须在WCF虚拟机上安装WIF,但最终是什么导致了我的问题。

本文在"使用windows更新包"一节中描述了唯一对我有用的东西(但我不得不对启动脚本进行一些小的更改)

基本上,我必须创建一个启动任务,它执行我在web项目下创建的批处理文件InstallWif.cmd。我还下载了WIF安装包(Windows6.0-KB974405-x64.msu)并将其包含在我的web项目中。我将这两个文件的"Copy to Output Directory"属性设置为"Copy Always"。

InstallWif.cmd包含以下脚本

@echo off
sc config wuauserv start= demand
wusa.exe "%~dp0Windows6.0-KB974405-x64.msu" /quiet /norestart
sc config wuauserv start= disabled
exit /b 0

请注意,我必须使用Windows6.0-KB974405-x64.msu,而不是Windows6.1-KB974405-x64.msu。通过使用与Azure的远程桌面连接登录到Azure VM实例并尝试在那里手动安装此版本,我发现6.1版本无法安装。

启动任务在ServiceDefinition.csdef文件中定义,如下

 <Startup>
   <Task commandLine="InstallWif.cmd" executionContext="elevated" taskType="simple" />
 </Startup> 

相关内容

最新更新