2

複数のクライアントのデータを取得する WsCF サービスを作成しています。ビジネス マネージャ オブジェクトを参照するサービス レイヤがあります。基本的に、サービス呼び出しで、web.config からプロバイダーの種類 (コード内のカスタム列挙型) と接続文字列を取得したいと考えています。

何らかの理由で、コードがプロジェクト web.config の設定を見つけることができません。IIS Express を収集しており、VS 開発 Web サーバーが machine.config を参照しています。これをオーバーライドするにはどうすればよいですか。とてもイライラします。スニペットからわかるように、設定と接続文字列名は存在しますが、コードはそれを取得しません。

私のコード:

Private Sub GetDBInformation()
    Dim config As System.Configuration.Configuration
    config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Nothing)
    If (config.AppSettings.Settings.Count > 0) Then
        Dim Setting As System.Configuration.KeyValueConfigurationElement
        Setting = config.AppSettings.Settings("DB TYPE")
        If Not (Setting.Value = Nothing) Then
            Select Case Setting.Value
                Case "SQL SERVER"
                    provider = ProviderType.SqlServer
                Case Else
                    provider = ProviderType.OleDb
            End Select
        End If
    End If

    If (config.ConnectionStrings.ConnectionStrings.Count > 0) Then
        connection = config.ConnectionStrings.ConnectionStrings("UMADB").ConnectionString
    End If
End Sub

web.config:

<connectionStrings>
    <add name="UMADB" 
         connectionString="Data Source=***********;Initial Catalog=UMA;UserID=********;Password=***********"
         providerName="System.Data.SqlClient" />
</connectionStrings>

<appSettings>
    <add key="DB TYPE" value="SQL SERVER" />
</appSettings>
4

1 に答える 1

0

これは、構成設定にアクセスするための非常に迂遠な方法です。なぜ、どのようにして にたどり着いたのかわかりませんがmachine.config、もっと簡単な方法があります。

System.Configuration名前空間をインポートすることを忘れないでください。

Dim Setting As String = ConfigurationSettings.AppSettings.Get("DB_TYPE")
If Not String.IsNullOrEmpty(DatabaseSetting) Then
    Select Case Setting 
        Case "SQL SERVER"
            provider = ProviderType.SqlServer
        Case Else
            provider = ProviderType.OleDb
    End Select
End If    

どのように、またはなぜあなたが にたどり着いたのかはわかりませんがmachine.config、それはあってはならないことです。現在のアプローチでは、構成ファイルを取得するときにアプリケーション ルートを指定してみてください。

System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/")
于 2012-04-28T01:18:03.900 に答える