我目前正在生产环境中执行此操作。在我的例子中,这个解决方案是显而易见的,因为已经安装了 MADAM,以便让普通的 RSS 阅读器安全地访问网站上的 RSS 提要。
这样做的诀窍是为您要使用任何外部进程自动调用的页面启用基本身份验证,这为您提供了多种自动访问站点的方法;这个 VBScript 文件,例如调用维护 URL 并检查来自服务器的响应是否完全是SUCCESS
.
Option Explicit
Dim result
result = PerformMaintenance("http://www.mysite.com/MyController/RunCleanupScript")
WScript.Quit(result)
Function PerformMaintenance(URL)
Dim objRequest
Set objRequest = CreateObject("Microsoft.XmlHttp")
'I use a POST request because strictly speaking a GET shouldn't change anything on the server.
objRequest.open "POST", URL, false, "LimitedDaemonUser", "SecretDaemonPassword"
objRequest.Send
if (objRequest.ResponseText = "SUCCESS") Then
PerformMaintenance = 0
Else
PerformMaintenance = 1
End If
set objRequest = Nothing
End Function
基本身份验证很容易开始工作。只需将MADAM包含在您的项目中,然后在您的 Web.config 中进行配置。
如果您使用标准 MembershipProvider,添加这些 Web.config 部分/参数 (IIS6) 应该可以使您的示例请求正常工作。您只需要更改MyNamespace.MembershipUserSecurityAuthority
为对实际类的引用。MADAM的源代码MembershipUserSecurityAuthority
包含在演示 Web 应用程序的App_Code
文件夹中。
<configuration>
<configSections>
<sectionGroup name="madam">
<section name="userSecurityAuthority" type="System.Configuration.SingleTagSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="formsAuthenticationDisposition" type="Madam.FormsAuthenticationDispositionSectionHandler, Madam" />
</sectionGroup>
</configSections>
<madam>
<userSecurityAuthority realm="MyRealm" provider="MyNamespace.MembershipUserSecurityAuthority, MyNamespace" />
<formsAuthenticationDisposition>
<discriminators all="false">
<discriminator inputExpression="Request.AppRelativeCurrentExecutionFilePath" pattern="~/MyController/RunCleanupScript$" type="Madam.RegexDiscriminator, Madam" />
</discriminators>
</formsAuthenticationDisposition>
</madam>
<system.web>
<httpModules>
<add name="FormsAuthenticationDisposition" type="Madam.FormsAuthenticationDispositionModule, Madam" />
<add name="AuthenticationModule" type="Madam.BasicAuthenticationModule, Madam" />
</httpModules>
</system.web>
</configuration>