2

ASPX ページに、送信後にコンテンツを保存して保持するフォームがあり、一部のフィールドを少し変更して再度複製できるようにしています。この機能は、データ入力時間を節約するために構築されています。

このフォームを保存してコンテンツを保持する機能は、イントラネット設定で動作する場合に正常に動作します。ただし、このサイトをパブリック アクセスのためにインターネットに展開すると、フォームの動作に一貫性がなくなります。

フォームの送信は数回正常に機能します (この数は変化し続けます) - フォームの値を保存し、同じ内容を保持しますが、後で以前のデータ エントリの値をランダムに表示します。

たとえば、製品情報を格納する 5 つのフィールドの形式で、タイトルだけを変更することを選択する場合があります。タイトルフィールドに値「Product 1」を初めて入力すると、それが保存され、同じフィールド値が引き続き表示されます。このプロセスを続けて、タイトルを「製品 5」に変更しようとすると、そのレコードが保存されず、期待どおりに「製品 5」が保持される代わりに「製品 3」が表示される場合があります。

これは、ViewState のサイズ制限や IIS キャッシュ設定と関係がありますか、それともファームに展開されているためですか? イントラネットで機能するサイト内のフォームが、インターネット サイトとして公開されると同様に機能しない理由を誰か説明できますか?

4

1 に答える 1

1

これにセッション状態を使用していて、アプリケーションが負荷分散されたファームに展開されている場合は、SQL Server を使用するようにセッション状態を構成する必要があります。

何が起こっているかというと、ヒットしているセッションはヒットしているボックスに依存するため、ポストバックが別のサーバーにヒットすると、そのサーバーのセッションにあるものは何でも取得します。

MSDN に示されている web.config の例を次に示します。

<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>

編集:したがって、セッション状態を使用しておらず、コードのどこにも値を触れていません。それはある種の奇妙なキャッシングを残すだけです。おそらく、サーバー ファームのキャッシュ設定はマシンごとに同じではありません...それが、説明した動作が得られることを確認できる唯一の方法です。

web.config で machine.config キャッシュ設定をオーバーライドできる場合があります。試す:

<system.web>
   <httpRuntime enableKernelModeCache="false"/>
</system.web>
于 2012-05-17T12:48:44.687 に答える