2011-12-08 11 views
1

変更を保存するASP.NET 4.0で実行されるカスタム構成セクションがあります。関連するクラスは次のとおりです。.NET ConfigurationElementCollection.Addメソッドがコレクションにアイテムを追加しない

  • QueueConfiguration:のConfigurationElement
    • QueueCollectionキュー//維持するキューのリストを
  • QueueCollection:ConfigurationElementCollectionの
  • キュー:のConfigurationElement

作品:

// This is a test case to ensure the basics work 
Queue newQueue = new Queue(); 
QueueCollection queues = new QueueCollection(); 
queues.Add(newQueue); // queues.Count is incremented here 

これは動作しません(と、エラーをスローしません):

// Read existing QueueConfiguration 
Queue newQueue = new Queue(); 
QueueConfiguration queueConfig = ConfigurationManager.GetSection("Queuing") as QueueConfiguration; 
queueConfig.Queues.Add(newQueue); // queues.Count is NOT incremented here 

また、これは動作しません(と、エラーをスローしません):

// Load QueueConfiguration from web.config 
Queue newQueue = new Queue(); 
Configuration config = WebConfigurationManager.OpenWebConfiguration("~"); 
QueueConfiguration queueConfig = config.GetSection("Queuing") as QueueConfiguration; 
queueConfig.Queues.Add(newQueue); // queues.Count is NOT incremented here  

て私の最初の3つの構成セクションのうちの1つが読み取り専用としてマークされていました。しかし、私がデバッグするとき、IsReadOnly()メソッドは、私のQueueConfigurationと私のQueueCollectionインスタンスに対してfalseを返します。

マイQueueCollectionクラスは、このスニペットが含まれています。私は、コードをステップ実行すると、この行に到達した

public void Add(Queue queue) 
{ 
    base.BaseAdd(queue, true); 
} 

、base.BaseAddが呼び出されますが、Countプロパティがインクリメントされません。あたかもBaseAddが要求を単に無視するかのようです。

提案がありますか? (私が何かを明らかにしていないことを願っています!)

+0

サイト内のライブ設定ファイルを編集しようとしていますか? –

+0

これは私の究極の目標です。他の設定セクションでもそれを成功させることができます。ただし、保存前にQueueCollectionにキューを追加する機能がなければ、保存は無意味です。 –

答えて

0

あなたのキューに時間を追加した後にConfig.Save()を呼び出しましたか?

Configuration config = WebConfigurationManager.OpenWebConfiguration("~"); 

//Do work 

config.Save(); 
+0

はい、私はしました。構成は、コレクションに追加しようとしたQueueなしで.configファイルに保持されます。 XMLのフォーマットがconfig.Save()メソッドによって変更されるため、.configファイルが変更されていることがわかりました。 しかし、私はconfig.Save()に到達することは私の問題とは無関係だと思います。 Queues.Add()を呼び出しても実際にキューが追加されない(またはエラーがスローされない)場合、設定を保存することは不可能です。 –

関連する問題