Извлечение пользовательской привязки из произвольного файла конфигурации - PullRequest
0 голосов
/ 25 сентября 2019

Я подключаюсь к веб-службе, для которой требуется настраиваемая привязка.У меня это работает, но проблема в том, что я не могу оставить пользовательскую привязку в app.config .Я поместил в проект другой файл *. Config и пытаюсь прочитать его.Я могу найти связывание, которое хочу, но оно выходит как BindingElement.Есть идеи, как преобразовать это в обычную привязку?

        string assemblyPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase), @"my.config");

        assemblyPath = assemblyPath.Replace(@"file:\", "");

        ExeConfigurationFileMap exeConfigurationFileMap = new ExeConfigurationFileMap();
        exeConfigurationFileMap.ExeConfigFilename = assemblyPath;

        Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(exeConfigurationFileMap, ConfigurationUserLevel.None);

        ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);

        var BindingsSection = serviceModelSectionGroup.Bindings;

        //Console.WriteLine(temp.Name);
        //Console.WriteLine(temp.GetType());

        //does not pull from the loaded config, but if i stick it in the app regular config it works
        var binding = new CustomBinding("MyCustomBinding");




        var endPoint = CreateEndPointAddress(new X509Certificate2(GetCertificate(thumbprint)), url);
        var client = new MyWebService(binding, endPoint);

'' '

1 Ответ

0 голосов
/ 26 сентября 2019

Можете ли вы преобразовать пользовательскую привязку в обычную привязку, применив ее в обычном файле конфигурации?похоже, вы правильно его преобразовали, и основная проблема заключается в том, как прочитать его на стороне клиента из другого файла конфигурации.
Вот пример того, как прочитать конфигурацию из другой конфигурации.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/configuration-channel-factory
Есть несколько моментов, на которые мы должны обратить самое пристальное внимание в этом примере (то же самое относится и к вашей текущей ситуации).

  1. Мы должны убедиться, что проект может найти другую конфигурацию правильно.Обычно мы делаем следующие изменения.
    enter image description here

  2. Имя конечной точки и адрес конечной точки должны соответствовать файлу конфигурации.


    ConfigurationChannelFactory factory1 = new 
    ConfigurationChannelFactory("BasicHttpBinding_IService1", newConfiguration, 
    new EndpointAddress("http://10.157.13.70:8080"));

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IService1" />
        <binding name="BasicHttpBinding_ITestService" />
      </basicHttpBinding>
    </bindings>
    <client>
       <!--pay attention to the Contract property. it should be in the client-side.-->
      <endpoint address="http://10.157.13.70:8080/" binding="basicHttpBinding"
          bindingConfiguration="BasicHttpBinding_IService1" contract="SimpleTest.IService1"
          name="BasicHttpBinding_IService1" />
      <endpoint address="http://10.157.13.69:4386/" binding="basicHttpBinding"
          bindingConfiguration="BasicHttpBinding_ITestService" contract="SimpleTest.ITestService"
          name="BasicHttpBinding_ITestService" />
    </client>
  </system.serviceModel>

Не стесняйтесь, дайте мне знать, если проблема все еще существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...