Как получить Connection String for Project Server Instance?
К сожалению, в Project Server, нет никакой возможность получить имена через PSI.
Поэтому прибегнем к маленькому Hacking’у, получение Connection String’ов требует использования Reflection.
Вот простой пример:
internal static Dictionary GetDbConnectionString(Guid pwaSiteId){
Dictionary _psDbNames =
new Dictionary();
Type _platformContextType = Type.GetType(
"Microsoft.Office.Project.Server.Base.PlatformContext, " +
"Microsoft.Office.Project.Server, " +
"Version=14.0.0.0, Culture=neutral, " +
"PublicKeyToken=71e9bce111e9429c");
Type _projectSiteType = Type.GetType(
"Microsoft.Office.Project.Server.Administration.ProjectSite, " +
"Microsoft.Office.Project.Server.Administration, " +
"Version=14.0.0.0, Culture=neutral, " +
"PublicKeyToken=71e9bce111e9429c");
Type _projectDatabaseType = Type.GetType(
"Microsoft.Office.Project.Server.Administration.ProjectDatabase, " +
"Microsoft.Office.Project.Server.Administration, " +
"Version=14.0.0.0, Culture=neutral, " +
"PublicKeyToken=71e9bce111e9429c");
MethodInfo _getProjectSiteMethodInfo =
_platformContextType.GetMethod("GetProjectSite", new Type[] { typeof(Guid) });
object _projectSiteObject = _getProjectSiteMethodInfo.Invoke(null, new object[] { pwaSiteId });
PropertyInfo _workingDatabaseProperty = _projectSiteType.GetProperty("WorkingDatabase");
PropertyInfo _publishedDatabaseProperty = _projectSiteType.GetProperty("PublishedDatabase");
PropertyInfo _versionsDatabaseProperty = _projectSiteType.GetProperty("VersionsDatabase");
PropertyInfo _reportingDatabaseProperty = _projectSiteType.GetProperty("ReportingDatabase");
PropertyInfo _dbConnectionStringProperty = _projectDatabaseType.GetProperty("DatabaseConnectionString");
object _workingDatabaseObject = _workingDatabaseProperty.GetValue(_projectSiteObject, null);
object _publishedDatabaseObject = _publishedDatabaseProperty.GetValue(_projectSiteObject, null);
object _versionsDatabaseObject = _versionsDatabaseProperty.GetValue(_projectSiteObject, null);
object _reportingDatabaseObject = _reportingDatabaseProperty.GetValue(_projectSiteObject, null);
SqlConnectionStringBuilder _connectionStringBuilder = new SqlConnectionStringBuilder(
_dbConnectionStringProperty.GetValue(_workingDatabaseObject, null) as string);
_psDbNames.Add("Working", _connectionStringBuilder.ConnectionString);
_connectionStringBuilder = new SqlConnectionStringBuilder(
_dbConnectionStringProperty.GetValue(_publishedDatabaseObject, null) as string);
_psDbNames.Add("Published", _connectionStringBuilder.ConnectionString);
_connectionStringBuilder = new SqlConnectionStringBuilder
(_dbConnectionStringProperty.GetValue(
_versionsDatabaseObject, null) as string);
_psDbNames.Add("Versions", _connectionStringBuilder.ConnectionString);
_connectionStringBuilder = new SqlConnectionStringBuilder(
_dbConnectionStringProperty.GetValue(
_reportingDatabaseObject, null) as string);
_psDbNames.Add("Reporting", _connectionStringBuilder.ConnectionString);
return _psDbNames;
}