Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблема использования приватного IP-адреса в DataSnap XE и её исправление в XE2

Delphi , Программа и Интерфейс , IDE и Компилятор

Исправление проблемы с использованием приватного IP-адреса в DataSnap XE и его реализация в XE2

В статье рассмотрим проблему, связанную с использованием приватного IP-адреса клиента в компоненте DataSnap XE, и то, как эта проблема была решена в последующих версиях продукта, включая XE2. Также будет рассмотрен вопрос о возможности перекомпиляции фреймворка DataSnap для пользователей.

Описание проблемы

Пользователи, работающие с DataSnap XE, столкнулись с проблемой, при которой метод procedure TDSTCPChannel.Open в модуле DSTCPServerTransport.pas использовал приватный IP-адрес подключенного пользователя при инициализации переменной FChannelInfo. Это вступало в противоречие с поведением HTTP-транспорта, который корректно использовал публичный IP-адрес клиента. Изменение кода в DSTCPServerTransport.pas с использованием Socket.Binding.IP на Socket.Binding.PeerIP позволило бы решить проблему, сделав поведение TCP-транспорта аналогичным HTTP-транспорту.

Обсуждение и предложенные решения

Разработчики обсуждали данную проблему в форумах Embarcadero, что можно проверить, перейдя по ссылкам Discussion #1 и Discussion #2. Проблема также была зарегистрирована в базе данных ошибок QC с номером #91030.

Попытки пользователей самостоятельно внести изменения в код привели к выводу, что перекомпиляция DataSnap Framework невозможна без изменений в Delphi XE, как описано в Stack Overflow.

Решение проблемы в XE2

Пользователь James обратился в поддержку Embarcadero с вопросом о возможности исправления в XE2 и о том, будет ли предоставлен патч для DataSnap до выхода XE2. Ответ от Embarcadero был однозначен: проблема была исправлена и решение появится в следующем общем релизе, включая XE2.

Пример кода на Object Pascal (Delphi)

// Исходный код, использующий приватный IP
FChannelInfo := TDBXSocketChannelInfo.Create(Integer(FContext.Connection), FContext.Connection.Socket.Binding.IP);

// Исправленный код, использующий публичный IP клиента
FChannelInfo := TDBXSocketChannelInfo.Create(Integer(FContext.Connection), FContext.Connection.Socket.Binding.PeerIP);

Заключение

Пользователям, работающим с DataSnap XE и столкнувшимся с описанной проблемой, рекомендуется обновиться до версии XE2, где данное исправление уже доступно. Это позволит корректно получать публичные IP-адреса клиентов в событии TDSServer.OnConnect через DSConnectEventObject.ChannelInfo.Info для TCP-соединений. Перекомпиляция DataSnap Framework пользователями, как правило, не требуется, если они используют актуальные версии Delphi.


Примечание: Статья предназначена для технически подкованных пользователей, знакомых с основами работы в Delphi и Object Pascal, а также имеющих опыт работы с компонентом DataSnap.

Создано по материалам из источника по ссылке.

Статья рассматривает проблему использования приватного IP-адреса в компоненте DataSnap XE и описывает, как это было исправлено в версии XE2.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: IDE и Компилятор ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 15:53:23/0.0022881031036377/0