从外部脚本调用ASP.NET pagemethod

时间:2012-05-08 20:49:19

标签: asp.net vb.net httpwebrequest webmethod

背景

我有一个ASP.NET站点,在我们公司的Intranet服务器上内部托管。该站点使用客户端的默认网络凭据进行身份验证。该站点的主页Default.aspx包含以下Web方法,该方法将一些数据从Oracle服务器同步到MS SQL服务器:

<WebMethod()> _
Public Shared Sub syncOracle()        
    OracleSync.MainSync()
End Sub

当我从网站本身访问该网络方法时(例如从页面上的按钮或其他东西),它工作正常并按预期执行。

问题

我想在服务器上设置一个按周期调用此方法的计划任务。到目前为止,我的方法是在VB中编写一个简单的控制台脚本,通过HTTPWebRequest访问Web方法:

Sub Main()
    Dim myReq As HttpWebRequest = _
       WebRequest.Create("http://vm-prod1/dev/default.aspx/syncOracle")
    myReq.Credentials = CredentialCache.DefaultNetworkCredentials
    myReq.Method = "POST"
    myReq.ContentLength = 0

    Dim response As HttpWebResponse = CType(myReq.GetResponse(), HttpWebResponse)

    Console.WriteLine(response.StatusCode)

    Console.ReadKey()
End Sub

这会返回200的“OK”状态,但是当我解析实际响应时,我没有得到当我从页面访问该方法时得到的响应(相反,我得到了整个aspx的代码)页)。并且同步没有触发。

问题

有没有人对更好/不同的方法(可能不使用HttpWebRequests)或修改我当前可能更好的方法有所了解?提前谢谢!

1 个答案:

答案 0 :(得分:1)

到目前为止,您可以做的最简单的事情是删除页面方法并切换到使用简单的通用处理程序。

使用通用处理程序,您没有所有标准Web表单页面生命周期,而是为您提供了一种非常灵活且简单的方式来运行您所描述的处理。

所以,我会在项目中添加一个通用处理程序(.ashx)文件。将代码放入需要运行的代码中。然后只需从控制台脚本执行该页面。