我有一个使用FluentSecurity的ASP.NET MVC网站。作为Azure网站,它可以正常工作。我需要使其成为WebRole。我添加了WebRole项目,但WebRole在启动时失败,并显示通用消息“由于发生内部服务器错误,因此无法显示该页面。”

我有一个DenyAnonymousAccessPolicyViolationHandlerRequireRolePolicyViolationHandler实现IPolicyViolationHandler,并根据http://blog.mariusschulz.com/setting-up-fluentsecurity-to-use-ninject-for-dependency-resolution进行了整个FluentSecurity设置。

我发现,当我删除两个都实现IPolicyViolationHandler的类时,WebRole就可以正常启动了。我创建了一个演示此问题的示例项目,您可以在https://dl.dropboxusercontent.com/u/73642/MvcApplication1.zip上找到它。

那么,如何使FluentSecurity与包括策略类在内的Azure WebRole一起使用?

最佳答案

我们遇到了同样的问题;在网站上工作,但不在网络角色中工作。

这是因为 Fluent Security 引用的是 MVC3,而不是 MVC4。 Github 上对这个 bug 的评论更详细地介绍了 https://github.com/kristofferahl/FluentSecurity/pull/39

您可以:

1) 获取 FluentSecurity.csproj 的本地副本并将其 System.Web.MVC 引用升级到 MVC 4,然后将其包含在您的解决方案中(这就是我们所做的)。

2) 或者,根据上面的 Github 错误链接“...使用 web.config 中的程序集重定向修复此问题”,如下所示

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
</runtime>

关于c# - Fluent Security使Azure Web角色失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17684377/

10-13 04:32