将应用程序配置嵌入到 wcf 中的 c# 代码中
Posted
技术标签:
【中文标题】将应用程序配置嵌入到 wcf 中的 c# 代码中【英文标题】:embed app config into c# code in wcf 【发布时间】:2013-02-21 06:38:54 【问题描述】:我有一个连接到我的 wcf 服务的客户端程序。我想将应用配置嵌入到C#代码中,直到用户无法更改甚至无法查看 app.config。
但我无法将这两个配置设置带入 C# 代码:
<system.diagnostics>
<sources>
<source propagateActivity="true" name="System.ServiceModel" switchValue="Warning">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="NewListener">
<filter type="" />
</add>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing" >
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="NewListener">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="Trace.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="NewListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
<filter type="" />
</add>
</sharedListeners>
</system.diagnostics>
还有
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" >
<proxy autoDetect="True" usesystemdefault="True"/>
</defaultProxy>
</system.net>
我添加了一些这样的代码
System.Diagnostics.XmlWriterTraceListener xmlt = new System.Diagnostics.XmlWriterTraceListener("Trace.svclog", "myListener");
System.Diagnostics.Trace.Listeners.Add(xmlt):
但是没有用。当您在 app.config 文件中设置跟踪侦听器时,应用程序将自动记录异常、警告等发生我自己。
关于默认代理,我找到了一些类,但我在类中找不到这些设置。
问题:
1-我想将这些设置带到 C# 代码中。(我希望 C# 结果与 app.config 结果完全相同)
2- app.config 比 C# 代码强吗?我可以在 c# 类中找到所有 app.config 设置吗?
【问题讨论】:
here 有一个绝妙的解决方案。 【参考方案1】:您可以使用System.Configuration.ConfigurationManager
+ System.Xml.XmlReader
/ System.Xml.Serialization.XmlSerializer
从您的文件中检索配置。然后您可以将其内容存储在数据库中,并在所有应有的地方手动使用。也正如@xmidPOE 建议的那样,请参阅这篇文章wcf-configuration-without-a-config-file
【讨论】:
【参考方案2】:是的,您可以在代码中配置 WCF 的所有设置。搜索***,我发现了一个链接,有人问过这个问题wcf-configuration-without-a-config-file 还有一个来自 Microsoft MSDN MSDN Source 的链接。 关于 WCF 的跟踪,这里有一个链接,对您也有帮助:WCF Tracing in code
【讨论】:
【参考方案3】:如何将 app.config 文件嵌入到程序集中?它应该是 app.config 文件属性中的一个选项。
或者您可以在代码中全部配置并完全摆脱 app.config 文件:
代理可以这样配置:
var proxy = HttpWebRequest.DefaultWebProxy;
proxy.Credentials = CredentialCache.DefaultCredentials;
但是,我认为 WCF 跟踪无法通过代码完全配置...您可以尝试使用其他日志记录机制或 ETW?
【讨论】:
【参考方案4】:我将解决您问题的即时修改 WCF Web.Config。请注意,此方法也适用于访问 APPConfig 文件。
您可以在表单应用程序范围之外访问配置文件。
System.Configuration.ExeConfigurationFileMap configMap = new ExeConfigurationFileMap("YourWCFAppPath\\web.config");
System.Configuration.Configuration webConfigFile = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
从那里你可以GetSections的配置;修改它,然后将其保存回配置文件。我现在不在一台装有 Visual Studio 的机器上,所以我不能 100% 确定获取元素部分的语法;拥有它后,您可以修改返回的对象,并在完成后对配置文件执行保存。保存配置文件时需要将模式指定为已修改。
webConfigFile.Save(ConfigurationSaveMode.Modified);
您需要记住让 WCF 应用程序调用在您修改配置文件时它已经运行的配置文件的刷新。如果您修改了连接字符串部分,您将执行以下代码。
System.Configuration.ConfigurationManager.RefreshSection("connectionStrings");
【讨论】:
我完全不想要 app.config 我只想用另一种方式处理它...app.config 可以由用户编辑我想删除它并在代码中引入设置。谢谢回答以上是关于将应用程序配置嵌入到 wcf 中的 c# 代码中的主要内容,如果未能解决你的问题,请参考以下文章
WCF C# 应用程序中的 Websockets 到 ORACLE 数据库
从 System32 中的文件夹加载 XML 文件以获取 wcf (.svc) c# 代码