-
Приветствыую Знатоков очень прошу помочь долго очень ищу решение данной роблемы.
если по порядку то:
1 создал WebService
2 к нему интрефейс и имплементацию интерфейса
вот в имвлементации мне нужно в одной из функций узнать каков IP клиента который выполняет данную функцию
дело в том что HTTPrequest уже там не доступен но я не могу поверить что нет возможности узнать IP клиента приславшего запрос на выполнение данной функции
-
Открываешь pas-файл, котором Delphi создала наследника TWebModule и создаёшь ему обработчик OnBeforeDispatch, туда передаётся TWebRequest.
-
и что дальше то это я прекрасно панимаю но как мне получить этот самый TWebRequest в function выполнение который запросил данный клиент? именно в этой функции мне нужен его IP
-
> Juri (11.04.08 17:16) [2]
> и что дальше то это я прекрасно панимаю
Ничего ты не понимаешь.
OnBeforeDispatch вызывается перед выполнением любой твоей функции, бери IP-адрес и сохраняй в куда-нибуть, а уж в своей функции доставай его и пользуй как-хочешь.
-
я может от целого рабочего дня уже не соображаю но я не панимаю
смотрите я беру из TWebRequest IP сохраняю в переменную какую либо после чего идёт выполнение функции которую запросил выполнить клиент
в это время происходит конект от другого клиента который хочет выполнить ту же функцию я снова сохраняю уже IP нового клиента и? теперь в той переменной другой IP и тот первый клиент уже не при делах получается.... или к примеру сразу 10 конектов от каждого пусть сохраним IP куда то в Array но как потом понять где чей???
-
[3] можно использовать для cgi-приложений, т.к. там для каждого запроса запускается отдельный экземпляр веб-сервиса.
А в общем случае, подключаешь модуль WebBrokerSoap и с помощью функции GetSOAPWebModule получаешь веб-модуль ответственный за запрос.
Используешь, как-то так
clientIP := (GetSOAPWebModule as TWebModule1).Request.RemoteAddr;
Попробуй, потом отпишешь, что получилось.
http://www.agnisoft.com/white_papers/advancedws/default.asp
-
Спасибо большое всё получилось
-
ещё раз спасибо за то что помогли в прошлый раз, но у меня появилась ещё одна проблемка. А именно SSL скомпилировал апаче модуль всё отлично работает по HTTP:// но стоит только попробовать по HTTPS:// получаю ошибку если перевести с немецкого что то вроде: "Служба сертификации недейстыительна или ошибочна". тут я даже не пойму в чём проблема так как в Helpe стоит что HTTPRIO поддерживает протокол HTTPS:// значит работать вс должно и если к примеру через файрфокс открыть страницу модуля что браузер сообщает что сертификат устарел и спрашивает действительно ли я хочу открыть данную страницу. отсюда я сделал вывод что HTTPRIO видимо проверяя сертификат выдаёт ошибку а том что он не действителен. Это конечно хорошо, но было бы лучше если бы после проверки спросив как файофокс хочу ли я дальше работать было бы возможным использовать мой сервис и с просроченным сертификатом.
Хотя возможно что я сделал ошибочные выводы, если это так прошу подсказать.
А если всё таки проблема в сертификате и никак не реализовать работу с просроченными сертификатами, подскажите как создать тестовый сертификат?
-
> Juri (29.04.08 12:20) [7]
Это всё в настройках апача надо делать, приложение здесь не при чём.
-
ещё не пойму как заставить SOAP компонениы испльзовать Indy?
-
> Это всё в настройках апача надо делать, приложение здесь
> не при чём.
но браузеры же могут открывать страницу модуля если подтвердить что хочешь открыть страницу не смотря на то что сертификат устарел?
-
> Juri (29.04.08 13:47) [9]
> ещё не пойму как заставить SOAP компонениы испльзовать Indy?
Зачем?
> Juri (29.04.08 13:49) [10]
> но браузеры же могут открывать страницу модуля если подтвердить
> что хочешь открыть страницу не смотря на то что сертификат
> устарел?
И?
Веб-сервер, по запросу через защищённое соединение отправляет данные и сертификат. Браузер получает это, проверяет сертификат, если он просрочен выдаёт сообщение и при согласии пользователя, показывает данные. Никакого отношения всё это к тому, кто подготовил данные на стороне веб-сервера, не имеет.
Настраивай апач, вроде у них тулз какой-то был для генерации сертификатов.
-
я скачал Openssl.exe для генерации сертификатов сделал приватный сертификат теперь браузеры говорят что сертификат приватный и не проверен официально... но мой клиент по прежнему выдаёт ошибку "Служба сертификации недейстыительна или ошибочна"... продебагил клиента своего ошибка приходит из wininet.dll значит всё таки это сервер... вариант с покупкой рального сертификата меня не устраивает... незнаю что и делать... всё таки хотелось бы чтоб клиент наплевав на недействительность сертификата работал с модулем...
> > Juri (29.04.08 13:47) [9] > ещё не пойму как заставить
> SOAP компонениы испльзовать Indy?Зачем?
увидел в Helpe что SOAP может использовать Indy а там есть IdSSLIOHandlerSocket в котором как я панимаю как раз можно осуществить работу даже с просроченым сертификатом
-
неужели невозможно чтоб HTTPRIO через https протокол работал даже с просроченым сертификатом
-
я нашёл всё таки... оказывается по умолчанию уже стоит такая настройка у компоненты это HTTPRIO.HTTPWebNode.InvokeOptions
там стоит как я сказал по умолчанию soIgnoreInvalidCerts:=true;
но несмотря на это я получаю ошибку "Служба сертификации недейстыительна или ошибочна"...
Очень прошу подскажите в чём проблема?