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 回答