Web Services WebService不读取web.config

sz81bmfz  于 2022-11-15  发布在  其他
关注(0)|答案(6)|浏览(205)

我在web.config中有3个连接字符串,我是这样使用它们的:

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SomeName"].ConnectionString))

每个metgod都由winforms应用程序调用。
其中一个webmethod无法正常工作,因为它只读取一个connectionString:

data source=.\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true

它不是我的web.config中的connectionString。
我以同样的方式调用每个方法。
怎么不可能??
编辑日期:
我用门面:这就是结构:WinForms调用WebMethod SaveItem SaveItem调用外观上的方法:保存项目和执行数据库的东西保存项目和执行数据库的东西。

mo49yndu

mo49yndu1#

我们无法看到您的Web结构,但是否有可能您的应用程序没有配置为IIS中的应用程序,因此正在获取 master web.config?它看起来 * 完全 * 像这样...
进入IIS并确保它是一个应用程序(它可能有一个齿轮图标)。

wgmfuz8q

wgmfuz8q2#

如果您的WinForms应用程序直接与数据库X对话(* 而不是 * 通过Web服务),那么数据库X的连接字符串应该在app.config中(在WinForms项目中)。
如果您的Web服务(据我所知,这包括外观和数据库层)与数据库X、Y和Z进行通信,则X、Y和Z的连接字符串需要在web.config中(在Web服务项目中)。

yk9xbfzb

yk9xbfzb3#

它使用的是www.example.com拥有的默认连接字符串asp.net(在machine.config的.net安装文件夹中)。
做一个明确的说明:

<configuration>
  <connectionStrings>
    <clear/>
    ... your connection strings here
  </connectionStrings>
</configuration>

顺便说一句,当你说你在连接字符串中使用“SomeName”时,它肯定不是你使用的任何随机连接字符串,它是默认的:“本机SqlServer”。

c90pui9n

c90pui9n4#

您应该将连接字符串存储在正在执行的任何项目的web.configapp.config中。
在您的示例中,您应该在winforms应用程序的app.config中包含连接字符串。

mpbci0fu

mpbci0fu5#

为什么不在请求连接字符串之前添加一个Trace行以打印出正在使用的配置文件。只需添加以下行:

System.Diagnostics.Trace.WriteLine(
            System.AppDomain.CurrentDomain.SetupInformation.ConfigurationFile,
            "APP_CONFIG");

在此之后设置一个断点,并查看输出窗口中以“APP_CONFIG:“开头的行。这将给予配置文件的完整路径,并允许您确定它被加载的位置。如果您仍然看到运行时值和配置文件之间的差异,则可能是在您的应用程序运行时更改了这些值。

zqry0prt

zqry0prt6#

这是一个迟来的答案,但也许是值得的。
我有一个Web服务项目,我想在两种模式下运行它。
一个是“localasapp”(用于测试),至少在我当前的系统设置中,它读取的文件是Web.config(它显然是在deug模式下读取的,而不是Web.Debug.config,至少对于数据库配置是这样)
因此,您可以将attribute部分替换为并复制在“为Web服务调用项目”中使用的部分。
因此更换

<connectionStrings>
  <add name="MyDB" 
    connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
    xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>

<appSettings>
        <!-- Database Connection -->
        <add key="AppDatabase" value="RedactedDatabase"/>
        <add key="AppLoginID" value="RedactedLoginID"/>
        <add key="AppLoginPwd" value="RedactedPwd"/>
</appSettings>

以上内容可以在“调用项目”中的app.config中找到....对我来说,这无论如何都更优雅。
现在它可以在两种模式下工作。
在C#中可以使用条件编译,但现在只需读入:
C#程式码:

String whichDatabase = System.Configuration.ConfigurationManager.AppSettings["AppDatabase"]; 

   String appUsedID = System.Configuration.ConfigurationManager.AppSettings["AppLoginID"]; 
   String appUsedPwd = System.Configuration.ConfigurationManager.AppSettings["AppLoginPwd"];

以上代码在任何一种模式下都可以工作,不需要条件编译指令。

相关问题