我有一个WCF数据服务,其中包含一些我在page_load事件期间异步调用的方法。
如果需要,我需要一个解决方案来从脚本或控制台应用程序中调用这些方法。
我创建了一个引用WCF .dll库的控制台应用程序。我必须将WCF服务下的web.config中的一些配置变量复制到控制台应用程序下的app.config中。
我希望app.config自动镜像web.config,或者以某种方式将控制台应用程序指向WCF服务web.config。
我的控制台应用程序和wcf项目在同一解决方案中彼此相邻,因此'configSource'属性不起作用。不允许父目录或绝对路径。
有没有人知道这方面的解决方法?
答案 0 :(得分:3)
好的,我不知道您的自定义配置部分是什么,但此类将向您展示如何以编程方式检索配置部分(此示例中为system.serviceModel / client),应用程序设置和连接字符串。您应该能够修改它以满足您的需求。
public class ConfigManager
{
private static readonly ClientSection _clientSection = null;
private static readonly AppSettingsSection _appSettingSection = null;
private static readonly ConnectionStringsSection _connectionStringSection = null;
private const string CONFIG_PATH = @"..\..\..\The rest of your path\web.config";
static ConfigManager()
{
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap()
{
ExeConfigFilename = CONFIG_PATH
};
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
_clientSection = config.GetSection("system.serviceModel/client") as ClientSection;
_appSettingSection = config.AppSettings;
_connectionStringSection = config.ConnectionStrings;
}
public string GetClientEndpointConfigurationName(Type t)
{
string contractName = t.FullName;
string name = null;
foreach (ChannelEndpointElement c in _clientSection.Endpoints)
{
if (string.Compare(c.Contract, contractName, true) == 0)
{
name = c.Name;
break;
}
}
return name;
}
public string GetAppSetting(string key)
{
return _appSettingSection.Settings[key].Value;
}
public string GetConnectionString(string name)
{
return _connectionStringSection.ConnectionStrings[name].ConnectionString;
}
}
用法:
ConfigManager mgr = new ConfigManager();
string setting = mgr.GetAppSetting("AppSettingKey");
string connectionString = mgr.GetConnectionString("ConnectionStringName");
string endpointConfigName = mgr.GetClientEndpointConfigurationName(typeof(IServiceContract));