ページ

2004年9月6日月曜日

.Text のバグ 「値を Null にすることはできません。パラメータ名 : value」

今まで、トップページ (たとえば http://www.divakk.co.jp/blog/aoyagi/ ) は見れるのに個別の記事 (たとえば http://www.divakk.co.jp/blog/aoyagi/archive/2004/09/01/571.aspx ) を見ようとすると 「値を Null にすることはできません。パラメータ名 : value」 なんてエラーが出て見れない、ということがたまに発生してました。(このエラーは一度発生すると、以後 IIS を再起動してやるとかしてやらないと復旧しません)


このエラーの原因がわかりました。
今日も起こってたのでスタックトレースを見てみたら Dottext.Framework.Stats.AddQuedStats(EntryView ev) なんてところが怪しそう。で、とりあえずググってみたら、そのものずばりの以下のページを発見。


K. Scott Allen's Blog より
.Text Threading Bug


こちらに書かれているようにソースを修正してビルドしなおすか、web.config の <Tracking> にある queueStats を queueStats = "false" にすれば OK です。


.Text では各記事ごとのアクセス数やどこから参照されたか(Referral)を見ることができますが、ここはその記録を取っているところです。これは当然アクセスがあるたびに処理する必要がありますが、負荷を減らせるようにキューイングできるようになっています。queueStats = "true" の場合、queueStatsCount の数に達するまではメモリ上においておき、達した時点でデータベースに書きにいきます。Stats.AddQuedStats() メソッドがそのキューイングの処理をしているところなんですが、lock のかけ方に問題があるため、同時に複数アクセスがあるとデータが壊れてしまい、エラーが発生するようになってしまいます。また、queueStats = "false" にすればこのキューイングを行わないようになり、毎回アクセスがあるたびにデータベースに登録するようになります。この場合は Stats.AddQuedStats() メソッドが使われることはないため、エラーが発生することはありません。

1 件のコメント:

  1. 。TEXT学習中にてお世話になりました。修正させてもらいました。

    有難うございました。

    返信削除

注: コメントを投稿できるのは、このブログのメンバーだけです。