我目前正致力于在窗口服务中托管 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";**
问题真的很奇怪。我检查了两种方式都返回相同的数据库路径,但只有硬编码的一种有效。有谁知道这是什么原因以及如何解决这个问题?