2

バックグラウンド

社内のイントラネットサーバーで内部的にホストされているASP.NETサイトがあります。サイトは、認証にクライアントのデフォルトのネットワーククレデンシャルを使用します。サイトのメインページにはDefault.aspx、OracleサーバーからMSSQLサーバーに一部のデータを同期する次のWebメソッドが含まれています。

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

サイト自体から(たとえば、ページのボタンなどから)そのWebメソッドにアクセスすると、正常に機能し、期待どおりに機能します。

問題

このメソッドを定期的に呼び出すサーバーにスケジュールされたタスクを設定したいと思います。HTTPWebRequestこれまでの私のアプローチは、 :を介してWebメソッドにアクセスする単純なコンソールスクリプトをVBで作成することでした。

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を使用していない)またはよりうまくいくかもしれない私の現在のアプローチへの変更のいずれかについての洞察を持っていますか?前もって感謝します!

4

1 に答える 1

1

最も簡単な方法は、ページ メソッドを削除して、単純なジェネリック ハンドラーの使用に切り替えることです。

汎用ハンドラーを使用すると、標準の Web フォーム ページのライフサイクルのすべてを使用できるわけではなく、説明したような処理を実行するための非常に柔軟で簡単な方法が得られます。

したがって、汎用ハンドラー (.ashx) ファイルをプロジェクトに追加します。実行する必要があるコードを入れます。次に、コンソール スクリプトからページを実行するだけです。

于 2012-05-08T22:26:30.867 に答える