【发布时间】:2011-11-18 04:08:03
【问题描述】:
我已经编写了一个修复程序,用于在我的网络服务器上运行计划的作业,到目前为止它运行良好。
我需要在我的 IIS 7 机器上每 x 分钟运行一次作业。为此,我创建了一个网页 (runcronjob.aspx),其中包含我想要运行的所有逻辑、检查数据库中的作业时间、上次运行时间、发送电子邮件、查询活动目录等。然后我使用了任务计划程序在我的工作站(不是 Web 服务器)上调用我创建的页面。我不再有一个始终在网络上的专用工作站,所以我想将计划任务移动到网络服务器上,这就是我卡住的地方。
Web 服务器是一台运行 IIS 7 的 Windows 2008 x64 机器。我尝试在 Web 服务器上创建计划任务,就像在本地机器上一样,但它不起作用。计划任务调用IEXPLORE.EXE,网页作为参数“http://mydomain.com/cron/runcronjob.aspx”。当 IE 7 在 Web 服务器上启动时,它会提示输入用户名和密码。我还尝试在服务器本地运行 vbs 脚本:
runjob.vbs
Call LogEntry()
Sub LogEntry()
'Force the script to finish on an error.
On Error Resume Next
'Declare variables
Dim objRequest
Dim URL
Set objRequest = CreateObject("Microsoft.XMLHTTP")
'Put together the URL link appending the Variables.
URL = "http://mydomain.com/cron/runcronjob.aspx"
'Open the HTTP request and pass the URL to the objRequest object
objRequest.open "GET", URL , false
'Send the HTML Request
objRequest.Send
'Set the object to nothing
Set objRequest = Nothing
End Sub
我在这种情况下遇到的问题是我在网站上设置了表单身份验证。因此,当运行此脚本时,它会重定向到登录页面,而不是在 runcronjob.aspx 上运行代码。为了解决这个问题,我将此代码添加到登录页面的 Page_Load 部分后面的代码中:
If Request.ServerVariables("LOCAL_ADDR") = Request.ServerVariables("REMOTE_ADDR") Then
FormsAuthentication.RedirectFromLoginPage("AD-ENT\accountToRunAs", False)
End If
登录页面执行代码,但它永远不会重定向回 runcronjob.aspx 以运行该代码。
我的想法开始用完了。
编辑: 我之所以采用这种“hacky”方法是因为我对 Web 服务器的访问权限非常有限,这就像拔牙甚至获得允许我在服务器上运行计划任务的权限。话虽如此,创建控制台应用程序或要运行的 Windows 服务等选项可能会很困难。
【问题讨论】:
-
除了打开IE,这个定时任务应该做什么?
-
@zeroef,而不是使用 Windows 任务调度程序来调用执行该作业的网页,而是将作业执行的逻辑从该 asp.net 页面移动到一个小型应用程序,如控制台应用程序,并使用 Windows 任务调度程序每隔 x 分钟调用一次此类应用程序。
-
你能在你的 vbs 结束时杀死 iexplore.exe 吗?
-
大卫是对的。使用 vb express 或 pro 编写一个简单的控制台应用程序。
-
@Davide 和 Amit - 查看我的编辑。我将所有逻辑都运行在网页上的原因是因为我知道我将始终有权修改它。我在 Web 服务器上没有管理员权限。 :(
标签: asp.net iis-7 windows-server-2008 scheduled-tasks