Как читать System.serviceModel в библиотеке классов с прокси-реализацией службы WCF - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь прочитать конфигурацию службы в библиотеке классов из файла app.config библиотеки. но становится ниже исключения

Не удалось найти элемент конечной точки с именем 'WSHttpBinding_IUsers' и контрактом 'ISGP.Plugins.SolveService.IUsers' в разделе конфигурации клиента ServiceModel. Это может быть потому, что для вашего приложения не найден файл конфигурации, или потому, что в клиентском элементе не найден элемент конечной точки, соответствующий этому имени.

Я попытался реализовать приведенный ниже код, чтобы прочитать конфигурацию и создать клиента

 public class ServiceManager
{
    public static T CreateServiceClient<T>(string configName)
    {
       // string _assemblyLocation = Assembly.GetExecutingAssembly().Location;

        var configuration = ConfigurationManager.OpenMappedExeConfiguration(
                         new ExeConfigurationFileMap
                         {
                             ExeConfigFilename = "app.config"
                         }, ConfigurationUserLevel.None);

        ConfigurationChannelFactory<T> channelFactory = new ConfigurationChannelFactory<T>(configName, configuration, null);
        var client = channelFactory.CreateChannel();
        return client;
    }


}

Вызовите этот метод, как показано ниже

    usersClient= (UsersClient)ServiceManager.CreateServiceClient<IUsersChannel>("WSHttpBinding_IUsers");
  usersClient.ClientCredentials.UserName.UserName = userName;
  usersClient.ClientCredentials.UserName.Password = password;

Но выдает вышеприведенное исключение файл app.config, как показано ниже

 <system.serviceModel>
  <bindings>
    <wsHttpBinding>
      <binding name="WSHttpBinding_IUsers">
        <security mode="TransportWithMessageCredential">
          <transport clientCredentialType="None" />
          <message clientCredentialType="UserName" establishSecurityContext="false" />
        </security>
      </binding>
    </wsHttpBinding>
  </bindings>
  <client>
    <endpoint address="https://xxxxxx16.prod.xxxxx.local/WebServices/v3/Users.svc"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IUsers"
        contract="ISGP.Plugins.SolveService.IUsers" name="WSHttpBinding_IUsers" />
  </client>
</system.serviceModel>

1 Ответ

0 голосов
/ 19 марта 2019

Пожалуйста, передайте параметр конечной точки в конструкторе фабрики каналов.

ConfigurationChannelFactory channelFactory = new ConfigurationChannelFactory (configName, configuration, null);

Можно использовать следующий код.

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = "app.config";
            Configuration newConfiguration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
            ConfigurationChannelFactory<IService> factory = new ConfigurationChannelFactory<IService>("endpoint1", newConfiguration, new EndpointAddress("http://localhost:8000/servicemodelsamples/service"));
            factory.Credentials.UserName.UserName = "jack";
            factory.Credentials.UserName.Password = "123456";
            IService client1 = factory.CreateChannel();

https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/configuration-channel-factory
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...