• Juri (11.04.08 15:20) [0]
    Приветствыую Знатоков очень прошу помочь долго очень ищу решение данной роблемы.
    если по порядку то:
    1 создал WebService
    2 к нему интрефейс и имплементацию интерфейса
    вот в имвлементации мне нужно в одной из функций узнать каков IP клиента который выполняет данную функцию

    дело в том что HTTPrequest уже там не доступен но я не могу поверить что нет возможности узнать IP клиента приславшего запрос на выполнение данной функции
  • Плохиш © (11.04.08 16:28) [1]
    Открываешь pas-файл, котором Delphi создала наследника TWebModule и создаёшь ему обработчик OnBeforeDispatch, туда передаётся TWebRequest.
  • Juri (11.04.08 17:16) [2]
    и что дальше то это я прекрасно панимаю но как мне получить этот самый TWebRequest в function выполнение который запросил данный клиент? именно в этой функции мне нужен его IP
  • Плохиш © (11.04.08 17:26) [3]

    > Juri   (11.04.08 17:16) [2]
    > и что дальше то это я прекрасно панимаю

    Ничего ты не понимаешь.
    OnBeforeDispatch вызывается перед выполнением любой твоей функции, бери IP-адрес и сохраняй в куда-нибуть, а уж в своей функции доставай его и пользуй как-хочешь.
  • Juri (11.04.08 17:35) [4]
    я может от целого рабочего дня уже не соображаю но я не панимаю
    смотрите я беру из TWebRequest IP сохраняю в переменную какую либо после чего идёт выполнение функции которую запросил выполнить клиент
    в это время происходит конект от другого клиента который хочет выполнить ту же функцию я снова сохраняю уже IP нового клиента и? теперь в той переменной другой IP и тот первый клиент уже не при делах получается.... или к примеру сразу 10 конектов от каждого пусть сохраним IP куда то в Array но как потом понять где чей???
  • Плохиш © (11.04.08 20:26) [5]
    [3] можно использовать для cgi-приложений, т.к. там для каждого запроса запускается отдельный экземпляр веб-сервиса.

    А в общем случае, подключаешь модуль WebBrokerSoap и с помощью функции GetSOAPWebModule получаешь веб-модуль ответственный за запрос.

    Используешь, как-то так

     clientIP := (GetSOAPWebModule as TWebModule1).Request.RemoteAddr;


    Попробуй, потом отпишешь, что получилось.

    http://www.agnisoft.com/white_papers/advancedws/default.asp
  • Juri (14.04.08 15:34) [6]
    Спасибо большое всё получилось
  • Juri (29.04.08 12:20) [7]
    ещё раз спасибо за то что помогли в прошлый раз, но у меня появилась ещё одна проблемка. А именно SSL скомпилировал апаче модуль всё отлично работает по HTTP:// но стоит только попробовать по HTTPS:// получаю ошибку если перевести с немецкого что то вроде: "Служба сертификации недейстыительна или ошибочна". тут я даже не пойму в чём проблема так как в Helpe стоит что HTTPRIO поддерживает протокол HTTPS:// значит работать вс должно и если к примеру через файрфокс открыть страницу модуля что браузер сообщает что сертификат устарел и спрашивает действительно ли я хочу открыть данную страницу. отсюда я сделал вывод что HTTPRIO видимо проверяя сертификат выдаёт ошибку а том что он не действителен. Это конечно хорошо, но было бы лучше если бы после проверки спросив как файофокс хочу ли я дальше работать было бы возможным использовать мой сервис и с просроченным сертификатом.
    Хотя возможно что я сделал ошибочные выводы, если это так прошу подсказать.
    А если всё таки проблема в сертификате и никак не реализовать работу с просроченными сертификатами, подскажите как создать тестовый сертификат?
  • Плохиш © (29.04.08 13:36) [8]

    > Juri   (29.04.08 12:20) [7]

    Это всё в настройках апача надо делать, приложение здесь не при чём.
  • Juri (29.04.08 13:47) [9]
    ещё не пойму как заставить SOAP компонениы испльзовать Indy?
  • Juri (29.04.08 13:49) [10]

    > Это всё в настройках апача надо делать, приложение здесь
    > не при чём.

    но браузеры же могут открывать страницу модуля если подтвердить что хочешь открыть страницу не смотря на то что сертификат устарел?
  • Плохиш © (29.04.08 15:43) [11]

    > Juri   (29.04.08 13:47) [9]
    > ещё не пойму как заставить SOAP компонениы испльзовать Indy?

    Зачем?

    > Juri   (29.04.08 13:49) [10]
    > но браузеры же могут открывать страницу модуля если подтвердить
    > что хочешь открыть страницу не смотря на то что сертификат
    > устарел?

    И?
    Веб-сервер, по запросу через защищённое соединение отправляет данные и сертификат. Браузер получает это, проверяет сертификат, если он просрочен выдаёт сообщение и при согласии пользователя, показывает данные. Никакого отношения всё это к тому, кто подготовил данные на стороне веб-сервера, не имеет.
    Настраивай апач, вроде у них тулз какой-то был для генерации сертификатов.
  • Juri (29.04.08 15:54) [12]
    я скачал Openssl.exe для генерации сертификатов сделал приватный сертификат теперь браузеры говорят что сертификат приватный и не проверен официально... но мой клиент по прежнему выдаёт ошибку "Служба сертификации недейстыительна или ошибочна"... продебагил клиента своего ошибка приходит из wininet.dll значит всё таки это сервер... вариант с покупкой рального сертификата меня не устраивает... незнаю что и делать... всё таки хотелось бы чтоб клиент наплевав на недействительность сертификата работал с модулем...


    > > Juri   (29.04.08 13:47) [9] > ещё не пойму как заставить
    > SOAP компонениы испльзовать Indy?Зачем?


    увидел в Helpe что SOAP может использовать Indy а там есть IdSSLIOHandlerSocket в котором как я панимаю как раз можно осуществить работу даже с просроченым сертификатом
  • Juri (30.04.08 13:38) [13]
    неужели невозможно чтоб HTTPRIO через https протокол работал даже с просроченым сертификатом
  • Juri (09.05.08 18:14) [14]
    я нашёл всё таки... оказывается по умолчанию уже стоит такая настройка у компоненты это HTTPRIO.HTTPWebNode.InvokeOptions
    там стоит как я сказал по умолчанию soIgnoreInvalidCerts:=true;
    но несмотря на это я получаю ошибку "Служба сертификации недейстыительна или ошибочна"...
    Очень прошу подскажите в чём проблема?
Есть новые Нет новых   [134432   +19][b:0][p:0.001]