- - PR -
Web.Configの情報を取得する方法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-07-23 10:30
ぷーちんです。いつもお世話になっております。
VB.NETでWebサービスを作成しています。 Grobal.asaxで、Web.Configの設定内容を取得しようとしていますが、 appSettingsから取得するのはできても、それ以外に作った設定情報ができません。 appSettingsを使って以下のように設定した場合 <appSettings> <add key="loginuser" value="aaa"></add> <add key="loginpwd" value="bbb"></add> </appSettings> 下のような方法で簡単に設定内容を取得することができます。 Dim app As New System.Configuration.AppSettingsReader() Dim strBuff As String strBuff = app.GetValue("ftpuser", GetType(String)) strBuff = app.GetValue("ftppwd", GetType(String)) ですが、できれば関連のものは、ひとまとめにして設定したいと思い、 以下のように設定してみました。 <login user = "aaa" pwd= "bbb" /> しかし、この設定した内容を取得する方法がわかりません。 普通は、appSettingsしか使わないものですか? 取得する方法があれば教えてください。 よろしくお願い致します。 | ||||||||
|
投稿日時: 2003-07-23 10:33
任意のXMLを利用したいなら、Web.Configではなく、任意の名前のファイルを使用すればいいのではないでしょうか。
(ファイル名をappSettingsに書いておくといいかも) | ||||||||
|
投稿日時: 2003-07-23 14:14
SingleTagSectionHandler とかではどうでしょう?
構成セクションとかカスタム構成セクションとかで ドキュメントを検索すればどこかにサンプルが出てると思います。 | ||||||||
|
投稿日時: 2003-07-23 16:11
こんな機能があったとは……。勉強になります。 自前のハンドラも使えるようですね。 | ||||||||
|
投稿日時: 2003-07-23 16:32
私も知りませんでした。
で、やってみました。
コード内で Hashtable h = (Hashtable)Context.GetConfig("login"); とすると、属性の名称と値のペアがとれます。 注意点 ・SingleTagSectionHandlerの後ろのカンマ以降は不要かもしれません。 私の環境では、1.0と1.1を入れているためか必要でした。 ・loginノードは1つしか書けません。 ということで、子ノードを持たせるようにするには、以下のような自前のハンドラが必要なようです。
| ||||||||
|
投稿日時: 2003-07-23 16:52
<sectionGroup> 要素あたりも調べると良いかも。 セクションハンドラの自作はちょっと注意点がありますので、 そのまま使えるんであれば用意されているものの方が無難です。 # 別に特別難しいというわけではありませんが。 # ある程度複雑になったり機能が足りなければ自作するのもいいと思います。 | ||||||||
|
投稿日時: 2003-07-23 17:18
ごめんなさい、上で書かれているような用途(同じタグが同位置に複数)には、 SingleTagSectionHandlerは使えないですね。 上記は、単にセクションをグループ化したい場合の話でした。 | ||||||||
|
投稿日時: 2003-08-07 17:20
ぷーちんです。いつもお世話になっております。
返事が遅くなりましたが、 catsさんが言われる通り、自前のハンドラを作って取得できるようになりました。 みなさん、どうもありがとうございました。今後ともよろしくお願い致します。 こんな感じでうまくいきました。 Web.configの内容 ------------------------------------------------ <configuration> <configSections> <section name="TestSettings" type = "TestSectionHandler, TestSectionHandlerのアセンブリ名" /> </configSections> <TestSettings> <login user = "aaa" pwd= "bbb" /> </TestSettings> <system.web> 以降省略 追加項目を取得する新しいクラス ----------------------------------------------- Public Class TestSectionHandler Implements IConfigurationSectionHandler '構成ファイルの情報保持 Protected Shared nodeConfigSection As System.Xml.XmlNode 'IConfigurationSectionHandler で実装が必要なメソッド Public Function Create(ByVal parent As Object, ByVal configContext As Object, ByVal section As System.Xml.XmlNode) As Object Implements System.Configuration.IConfigurationSectionHandler.Create If configContext Is Nothing Then Trace.Write("configContext is nothing.") Exit Function End If If section Is Nothing Then Trace.Write("section is nothing.") Exit Function Else nodeConfigSection = section.Clone() End If End Function '属性値を取得 Public Shared Function GetInfo(ByVal strAttribute As String, ByVal strItem As String) As String Dim xmlNode As Xml.XmlNode = nodeConfigSection.SelectSingleNode(strAttribute) '構成がない If xmlNode Is Nothing Then Return Nothing End If '項目がない If xmlNode.Attributes(strItem) Is Nothing Then Return Nothing End If Return xmlNode.Attributes(strItem).Value.ToString End Function End Class |
1