我在我的ASP.NET MVC应用程序中创建了一个控制器来处理应用程序的预热/初始化(即加载Web服务客户端代理和其他最初需要大量时间的操作)。为了调用WarmUp控制器,我正在使用IIS 7/7.5预热模块,在应用程序池启动时发送请求。
我不希望所有用户都能执行WarmUp控制器操作,因此我使用
如果我使用Web浏览器手动调用WarmUp控制器并提供正确的凭据,则一切正常。但是,当使用IIS预热模块时,即使我提供正确的凭据,我也会在应用程序事件日志中看到身份验证失败的警告。
如果我仅为预热模块的用户上下文指定类型和用户名,则会出现
值得注意的是,我还尝试了ASP.NET 4.0应用程序自动启动功能,但似乎没有像实际请求应用程序那样产生相同的效果。还有其他要考虑的替代方案吗?
我不希望所有用户都能执行WarmUp控制器操作,因此我使用
[Authorize]
属性对控制器进行了标记。我甚至在我的域中创建了一个包含应该允许执行预热操作的用户的组,并将此组添加为授权属性的角色(即[Authorize(Roles = @"MyDomain\AppWarmUp")]
)。如果我使用Web浏览器手动调用WarmUp控制器并提供正确的凭据,则一切正常。但是,当使用IIS预热模块时,即使我提供正确的凭据,我也会在应用程序事件日志中看到身份验证失败的警告。
如果我仅为预热模块的用户上下文指定类型和用户名,则会出现
ProviderException
,其中包含以下消息:
如果我同时指定用户名和密码/令牌,则会出现Method is only supported if the user name parameter matches the user name in the current Windows Identity.
ArgumentException
,其中包含以下消息:
如果我从控制器中删除Invalid token for impersonation - it cannot be duplicated.
[Authorize]
属性,则预热模块的请求将通过而没有任何异常。但是,如果可能的话,我希望避免所有用户都可以访问WarmUp控制器的情况。这可能是预热模块中的错误还是我漏掉了什么?值得注意的是,我还尝试了ASP.NET 4.0应用程序自动启动功能,但似乎没有像实际请求应用程序那样产生相同的效果。还有其他要考虑的替代方案吗?