【发布时间】:2013-12-16 08:54:01
【问题描述】:
我有一个 MVC 4 应用程序部署到已运行数月的 Azure 云服务。突然,该应用程序停止工作,我在允许匿名访问的页面上看到 401 错误。深入事件日志会发现:
<EventData>
<Data>System.AppDomain/50824127</Data>
<Data>System.Runtime.Serialization.SerializationException: Type is not resolved for member 'Microsoft.IdentityModel.Claims.ClaimsPrincipal,Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. at System.Web.Hosting.ApplicationManager.GetUpdatedTotalCacheSize(Int64 sizeUpdate) at System.Web.Hosting.ObjectCacheHost.System.Runtime.Caching.Hosting.IMemoryCacheManager.UpdateCacheSize(Int64 size, MemoryCache memoryCache) at System.Runtime.Caching.CacheMemoryMonitor.GetCurrentPressure() at System.Runtime.Caching.MemoryMonitor.Update() at System.Runtime.Caching.MemoryCacheStatistics.CacheManagerThread(Int32 minPercent) at System.Threading.ExecutionContext.runTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading._TimerCallback.PerformTimerCallback(Object state)</Data>
<Data>w3wp</Data>
<Data>2548</Data>
</EventData>
经过数小时的故障排除和检查配置,我无法找出发生这种情况的原因。程序集 Microsoft.IdentityModel, 3.5.0.0 位于部署包的 bin 文件夹中,并且项目具有对 WIF nuget 包的正确引用。
更糟糕的是,我的项目在一个天蓝色云服务中运行,但在另一个云服务中却不行(如上所述失败)。相关问题似乎数量有限,例如Type is not resolved for member "Microsoft.IdentityModel.Claims.ClaimsPrincipal,Microsoft.IdentityModel",但这一个与在开发人员工作站上运行sitefinity有关,而我的问题在云端。
有什么想法吗?
【问题讨论】:
-
据我所知,如果您运行的是 .NET 4.5,则不再需要启动任务,因为新程序集来自 GAC。您可能会确保没有将 WIF 和较新的 Microsoft.IdentityModel 命名空间混在一起。在这里查看我对自己问题的回答:stackoverflow.com/a/12950590/1014822
-
我仍在使用此应用程序使用 .NET 4。
-
那么下面的答案是正确的:你需要运行一个启动任务来安装WIF。仅在 bin 文件夹中包含 .dll 是行不通的。详情在这里:stackoverflow.com/a/10206387/1014822
-
@JcFx - 这在世界上都很有意义,除了我能够在另一个 azure 计算服务中部署完全相同的代码,而且它工作正常,这让我发疯,我没有还没弄明白为什么。
标签: asp.net-mvc azure wif