5

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

关于默认代理我找到了一些类,但我在类中找不到这些设置。

问题 :

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

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

4

4 回答 4

3

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

于 2013-03-11T00:34:45.533 回答
1

将 app.config 文件嵌入到程序集中怎么样?它应该是 app.config 文件属性中的一个选项。

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

代理可以配置如下:

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

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

于 2013-03-10T22:50:24.067 回答
1

我将在您问题的动态方面解决 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");
于 2013-03-09T15:44:26.010 回答
1

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

于 2013-03-13T08:49:39.000 回答