1

我目前正致力于在窗口服务中托管 wcf 服务。wcf 服务提供客户端使用实体框架访问数据库。我让他们都工作了。我一直在尝试两种条件,这给了我不同的结果。

1)当我在Windows服务的Service类中以编程方式硬编码数据库路径以在app.config文件中的连接字符串内动态更改数据源时。执行以下代码后,我可以使用Web通过服务获取查询数据返回 XML 文档的浏览器。但是,2)由于某种原因不起作用。请参阅以下代码以动态保存 app.config 的数据源更改:

 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            EntityConnectionStringBuilder efb =
                new EntityConnectionStringBuilder(
                    config.ConnectionStrings.ConnectionStrings["iPhysioAndroidDBEntities1"]
                        .ConnectionString);

            SqlConnectionStringBuilder sqb =
                new SqlConnectionStringBuilder(efb.ProviderConnectionString);

              **// hard-coded the db path
            sqb.DataSource = "C:\\Users\\Siu W\\Desktop\\data\\iPhysioAndroidDB";**

            efb.ProviderConnectionString = sqb.ConnectionString;
            Console.WriteLine(sqb.ConnectionString);
            config.ConnectionStrings.ConnectionStrings["iPhysioAndroidDBEntities1"]
                .ConnectionString = efb.ConnectionString;

            config.Save(ConfigurationSaveMode.Modified, true);
            ConfigurationManager.RefreshSection("connectionStrings");

2)当我尝试使用 System.environment.Username 从机器获取当前用户名时,在上面相同的代码中使用完整的 db 文件路径,当我在调试模式下放一个断点时,它确实返回了机器的用户名。但是,我无法使用 Web 浏览器通过服务获取查询结果。出现“请求错误”。

   **// dynamically get the user name for the db path
            sqb.DataSource = "C:\\Users\\" + System.Environment.UserName + "\\Desktop\\data\\iPhysioAndroidDB";**

问题真的很奇怪。我检查了两种方式都返回相同的数据库路径,但只有硬编码的一种有效。有谁知道这是什么原因以及如何解决这个问题?

4

0 回答 0