繁体   English   中英

将app config嵌入到wcf中的c#代码中

[英]embed app config into c# code in wcf

我有一个连接到我的wcf服务的客户端程序。 我想将app config嵌入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文件中设置跟踪侦听器时,应用程序将自动记录异常,警告等发生(我想要),但是当我创建System.Diagnostics.XmlWriterTraceListener时,我必须写自己的日志(例外)。

关于默认代理我发现了一些类但我无法在类中找到这些设置。

问题:

1-我想将这些设置带到C#代码。(我希望C#结果与app.config结果完全一样)

2-是app.config比C#代码强吗? 我可以在c#类中找到所有app.config设置吗?

是的,您可以在代码中配置WCF的所有设置。 搜索stackoverflow我找到了一个链接,这个问题已经被问到wcf-configuration-without-a-config-file还有来自Microsoft MSDN MSDN Source的链接。 关于WCF的跟踪,这里有一个链接也可以帮助您: WCF跟踪代码

我将在你的问题的飞行方面解决WCF Web.Config的修改。 请注意,此方法也适用于访问APPConfig文件。

您可以访问Form应用程序范围之外的配置文件。

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文件属性中的一个选项。

或者您可以在代码中配置它并完全删除app.config文件:

代理可以配置为:

var proxy = HttpWebRequest.DefaultWebProxy;
proxy.Credentials = CredentialCache.DefaultCredentials;  

但是,我认为无法通过代码完全配置WCF跟踪...您可以尝试使用其他日志记录机制或ETW吗?

您可以使用System.Configuration.ConfigurationManager + System.Xml.XmlReader / System.Xml.Serialization.XmlSerializer从文件中检索配置。 然后,您可以将其内容存储在数据库中,并在所有应该使用的位置手动使用。 另外,正如@xmidPOE建议的那样,请参阅本文wcf-configuration-without-a-config-file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM