5

wcfサービスに接続するクライアントプログラムがあります。ユーザーがapp.configを変更または表示できなくなるまで、app configC#コードに埋め込みたいです。

しかし、これら2つの構成設定を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ファイルでTraceListenerを設定すると、アプリケーションは自動的にログ例外、警告などが発生します(必要な場合が、System.Diagnostics.XmlWriterTraceListenerを作成すると、自分でログ(例外)を書き込む必要があります。

デフォルトのプロキシについていくつかのクラスを見つけましたが、クラスでそれらの設定を見つけることができません。

質問:

1-これらの設定をC#コードに変換したい(C#の結果をapp.configの結果とまったく同じにしたい)

2- app.configはC#コードよりも強力ですか?c#クラスですべてのapp.config設定を見つけることができますか?

4

4 に答える 4

3

はい、コードでWCFのすべての設定を構成できます。スタックオーバーフローを検索すると、この質問が尋ねられたリンクが見つかりましたwcf-configuration-without-a-config-file また、Microsoft MSDNMSDNSourceからのリンクがあります。WCFのトレースについては、次のリンクも役立ちます。コードでのWCFトレース

于 2013-03-11T00:34:45.533 に答える
1

質問のその場でのWCFWeb.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

app.configファイルをアセンブリに埋め込むのはどうですか?これは、app.configファイルのプロパティのオプションである必要があります。

または、すべてをコードで構成して、app.configファイルを完全に削除することもできます。

プロキシは次のように構成できます。

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

ただし、WCFトレースをコードで完全に構成することはできないと思います...別のログメカニズムまたはETWを使用してみてください。

于 2013-03-10T22:50:24.067 に答える
1

System.Configuration.ConfigurationManager+ System.Xml.XmlReader/を使用System.Xml.Serialization.XmlSerializerして、ファイルから構成を取得できます。次に、そのコンテンツをデータベースに保存し、本来あるべきすべての場所で手動で使用できます。また、@ xmidPOEがアドバイスしたように、この記事wcf-configuration-without-a-config-fileを参照してください。

于 2013-03-13T08:49:39.000 に答える