我目前正致力于在窗口服务中托管wcf服务。 wcf服务使客户端可以使用实体框架访问数据库。我让他们都工作了。我一直在尝试两个条件,这给了我不同的结果。
1)当我在Windows服务的Service类中以编程方式对数据库路径进行硬编码时,在app.config文件中的连接字符串中动态更改数据源。执行下面的代码后,我可以通过服务获取查询数据使用返回XML文档的Web浏览器。但是,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";**
这个问题真的很奇怪。我已经检查过两种方式都返回相同的数据库路径,但只有硬编码的路径才有效。有谁知道这个的原因以及如何解决这个问题?