1

app.config ファイルがあります。それは私が使用しなければならないAPIのために私に与えられたサンプルからのものです.ファイルから設定を取得して、そこから設定を使用できるようにし、努力を繰り返す必要がないようにしたい.

この app.config ファイルで "FindMe"、"LocalMachine"、"My" という単語を取得するにはどうすればよいですか (指定された情報から証明書を取得するため)。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>...</startup>
  <system.serviceModel>
    <bindings>...</bindings>
    <client>...</client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="ClientCertificateBehavior">
          <clientCredentials>
            <clientCertificate findValue="FindMe" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
            <serviceCertificate><authentication certificateValidationMode="None"/></serviceCertificate>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

System.ServiceModel.Configuration または ConfigurationManager で見つけることができるかどうかを調べていますが、これらの特定の値を取得する方法がわかりません。

編集:

私は本当に近いと思いますが、値を取得できないようです。

ここに画像の説明を入力

4

2 に答える 2

2

Gandarez のコメントと Phils の回答を出発点として使用することで、このソリューションを突き詰めることができました。完成にはほど遠いですが、値を取得できるようになり、必要に応じて微調整できます。

using System.Configuration;
using System.ServiceModel.Configuration;
using config = System.Configuration.Configuration;
namespace Client
{
    public class Program
    {
        private static void Main(string[] args)
        {
            config Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            ServiceModelSectionGroup Group = ServiceModelSectionGroup.GetSectionGroup(Config);
            BehaviorsSection Behaviors = Group.Behaviors;
            EndpointBehaviorElementCollection EndpointBehaviors = Behaviors.EndpointBehaviors;
            EndpointBehaviorElement EndpointBehavior = EndpointBehaviors[0];
            ClientCredentialsElement ClientCredential = (ClientCredentialsElement) EndpointBehavior[0];
            var ClientCertificate = ClientCredential.ClientCertificate;

            var findValue = ClientCertificate.FindValue;
            var storeName = ClientCertificate.StoreName;
            var storeLocation = ClientCertificate.StoreLocation;
            var X509FindType = ClientCertificate.X509FindType;
        }
    }
}

ここに画像の説明を入力

于 2014-08-19T01:46:40.573 に答える
1

にアクセスするServiceModelSectionGroupと、モデルのさまざまな部分にアクセスできます。例:Behaviors.EndpointBehaviorsコレクション

WCF セクション情報

 public ServiceModelSectionGroup GetServiceModelSectionGroup() {
        var cfg = GetConfig();

        ServiceModelSectionGroup serviceModelSection = ServiceModelSectionGroup.GetSectionGroup(cfg);

        return serviceModelSection;
    }


public Configuration GetConfig() {
        if (_cfg == null) {
            if (HostingEnvironment.IsHosted) // running inside asp.net ?
            { //yes so read web.config at hosting virtual path level
                _cfg = WebConfigurationManager.OpenWebConfiguration(HostingEnvironment.ApplicationVirtualPath);
            }
            else { //no, se we are testing or running exe version admin tool for example, look for an APP.CONFIG file
                //var x = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
                _cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            }
        }
        return _cfg;
    }
于 2014-08-18T21:03:57.697 に答える