1

ASP.NET Webサイトと別のC#アプリケーションがあります。アプリケーションはデータをファイルに書き込み、Webサイトはツリービューにファイル内のデータを入力します。ページのLoadイベントにツリービューを入力します。

Webサイトは、ファイルが変更されたかどうかを確認します。これは、コードビハインドファイルから発生します。ファイルが変更された場合は、Webサイトを更新する必要があります。Response.Redirect入手したので使えません

このコンテキストでは応答は利用できません

試しSystem.Web.HttpContext.Current.Response.Redirectましたが、NullReferenceが表示されます。

コードビハインドファイルからページを更新して、ツリービューに適切なデータをロードするにはどうすればよいですか?うまくいくが、ページを更新する以外の何かを使用する他の提案は大歓迎です。前もって感謝します!

編集:実際の問題は、ツリービューを動的に更新することです(新しいデータ=更新されたツリービュー)。MySqlデータベースのデータを使って何かをしようとしましたが、失敗しました。データがファイルからではなくデータベースからのものであることを除いて、考え方は同じです。この情報はユーザーが私の問題を理解するのに役立つかもしれないと思ったので、これを追加しました。

4

2 に答える 2

2

サーバーのイニシアチブからクライアントにデータを送信することはできません。

新しいデータが利用可能かどうかをポーリング(jQuery / ajax)してから、クライアント側から更新する必要があります。

これには基本的に:

  • サーバー上
    • 新しいデータが利用可能かどうかを判断できるWebサービス、Webメソッドページメソッド、カスタムハンドラーなど
  • クライアントで
    • データが更新された場合にサーバーにクエリを実行し、この場合はページを更新するタイマー、またはJSテンプレートを使用している場合はDOMを再構築するタイマー

[編集]少し背景:

実際にSystem.Web.HttpContext.Current.Responseは、Httpプロトコルの非同期モデルのためにnullです。ブラウザはリクエスト「http:// srv / resource」を発行し、サーバーはポート80でそれをインターセプトし(デフォルト)、リクエストを解析し、レスポンス(主にHTMLコンテンツの束)を作成して、ブラウザにレスポンスを送信します。その後、接続が閉じられます。この選択により、データがほとんど渡されることなく何千もの接続を維持する必要がないため、優れたスケーラビリティが可能になります。

これの影響は、Webサーバーが、要求で送信されるもの以外に、クライアントを認識している必要があることです。サーバーはテキストを受信し、代わりにテキストを送信します。

Microsoftは、デスクトップアプリケーションのRAD感覚を再現するためにASP.Netフレームワークを作成しました。ASPやPHPのようなHTMLフローを生成するのではなく、コントロールとイベントで考えます。彼らは、Webアプリの構築はデスクトップ開発と非常に似ているという意味で成功しました。

かなりが実際にあなたにいくつかの混乱を引き起こしているものです。asp.netフレームワークがこの動作をシミュレートするためにほとんどの配管(ビューステートがキー)をカプセル化する場合でも、asp.netは、少なくとも、クライアントに送信するhtmlテキストを生成する要求テキストのパーサーになります。ワンショット。

だからあなたはごまかさなければなりません。私が提案したように、ブラウザーを自動化して(javascriptを使用して)、この非同期作業を「動的」アプリケーションにラップすることができます。

于 2011-10-12T12:40:51.167 に答える
0

Webページ内からFileSystemWatcherを正常に使用することはできません。

ページのインスタンスは、単一のリクエストを処理するのに十分な長さです。そして、そのリクエストが処理された後は、リダイレクトを発行することはできません。ブラウザはもうリッスンしていません。

そのファイルを最後に読んだ日付を使用して、Webページからポーリングを実行する必要があります。そのファイルの最終更新日が覚えている日付から変更された場合は、ページを更新する必要があります。

于 2011-10-12T14:14:38.847 に答える