我正在尝试使用功能区按钮从列表中运行计时器作业,单击该按钮时会弹出一个页面,但访问被拒绝



我正在尝试使用功能区按钮从列表中运行计时器作业,单击按钮时会弹出页面。在该页面加载中,我已授予运行提升的权限和job.runnow()。我在生产环境中遇到拒绝访问异常,但它在系统测试中工作正常。请参阅以下代码:

 SPWebApplication mainWebApp = SPContext.Current.Site.WebApplication;
 bool b = mainWebApp.RunningJobs.Cast<SPRunningJob>().Any(curRunningJob => curRunningJob
                    .JobDefinitionTitle.Equals("JobName"));
                try
                {
                    SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        SPJobDefinition job = mainWebApp.JobDefinitions.Cast<SPJobDefinition>().
                            FirstOrDefault(i => i.DisplayName.Equals("JobName"));
SPContext.Current.Web.AllowUnsafeUpdates = true;
                                job.RunNow();//getting access denied exception at this line 

TimerJobs 是 Farm (configdb) 项。
因此,要对它们做任何事情,您需要成为农场管理员。这意味着当前用户必须是服务器场管理员(然后,您甚至可能会遇到挑战,具体取决于您使用的身份验证方法)。
或者,运行 Web 应用的应用程序池的服务帐户必须是服务器场管理员并使用 runwithelevatedpriviledges,出于明显的安全原因,这是一个糟糕的主意。
或者,您需要将一些服务器场管理员存储在某个地方并从中创建上下文(这也不利于安全性,性能和可维护性)。
我强烈建议您查看您的解决方案,以避免需要从 Web 界面触发计时器作业。

最新更新