Подключение к службе WCF после изменения конечной точки во время выполнения

Я создаю форму аутентификации, в которой пользователь должен определить IP-адрес службы WCF, имя пользователя и пароль.

Перед созданием подключения к сервису IP-адрес конечной точки, введенный пользователем, сохраняется в файле app.config. См. следующий код:

         Configuration configFile = ConfigurationManager.
                                     OpenExeConfiguration(ConfigurationUserLevel.None);
         ServiceModelSectionGroup serviceSection = ServiceModelSectionGroup.
                                                      GetSectionGroup(configFile);

        ClientSection clientSection = serviceSection.Client;
        Uri uri = clientSection .Endpoints[0].Address;

        UriBuilder builder = new UriBuilder(uri);
        builder.Host = ServerIP;
        clientSection .Endpoints[0].Address = builder.Uri;
        configFile.Save(ConfigurationSaveMode.Modified);

При первом подключении к WCF все в порядке, то есть если IP правильный, он аутентифицирует пользователя, если нет - показывается соответствующее сообщение.

Но если IP-адрес конечной точки службы изменяется после первого подключения и воссоздается клиентский объект, он пытается подключиться к службе, используя предыдущий IP-адрес, а не новый.

Я попытался установить новую конечную точку непосредственно для обслуживания следующим образом:

          ServiceClient client = new ServiceClient();
          client.Endpoint.Address = new_uri_address;

но безуспешно.

Интересно, почему это происходит и как правильно назначить новую конечную точку клиенту WCF?


person kolkhi    schedule 21.08.2014    source источник


Ответы (3)


app.config читается при первой загрузке программы. ваши изменения не вступят в силу, если вы не закроете приложение и не перезапустите его. Чтобы преодолеть это, вы должны полностью определить и настроить свой клиент wcf из кода. по крайней мере, это метод, который работал для меня. я могу предоставить полный пример, если нужно

person Sam    schedule 21.08.2014
comment
Спасибо за ответ. App.config изменяется после запуска приложения, но первое подключение к WCF после этого изменения в порядке. Проблема возникает, когда после второго изменения. Если единственный способ - завершить перенастройку клиента wcf, я попытаюсь это сделать. Спасибо еще раз - person kolkhi; 22.08.2014

Чтобы иметь возможность подключиться к сервису, клиенту нужны три элемента информации — адрес, привязка и контракт. Вы можете попробовать установить их с помощью кода и проверить, используется ли новый IP-адрес. Посмотрите на это решение: Динамически установить адрес конечной точки в клиенте wcf (с привязкой net tcp)

person Aditya Patil    schedule 22.08.2014

Еще раз спасибо за ваши ответы. Я воссоздал клиент wcf, определив привязку и конечную точку, и это сработало.

    Configuration configFile = ConfigurationManager.
                                 OpenExeConfiguration(ConfigurationUserLevel.None);
    ServiceModelSectionGroup serviceSection = ServiceModelSectionGroup.
                                                  GetSectionGroup(configFile);

    ClientSection clientSection = serviceSection.Client;

    System.ServiceModel.Channels.Binding bind = new BasicHttpBinding(clientSection .Endpoints[0].BindingConfiguration);
    EndpointAddress newEndpoint = new EndpointAddress(clientSection .Endpoints[0].Address);

    my_service = new TCCSServiceClient(bind, newEndpoint);
person kolkhi    schedule 22.08.2014