AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.12.2014, 09:43   #1  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
X++:
WinInet winInet = new WinInet(...); //internetOpen вызывается в new
int hURL;
int hReq;
int res;
str ret;

 if (winInet.ok())
 {
        hURL = winInet.internetConnect(servername,80);
        hReq = winInet.OpenRequest(hURL, url, 'POST');
        res = winInet.SendRequest(hReq, hdr, data);
        ret = winInet.internetReadFile(hReq);
 }
Важно не столько как функции вызывать, а какие параметры передавать.
servername - адрес сервера (напр www.yandex.ru или ip) без http
url - путь на сервере (если нужен)
hdr - заголовок (зависит от сервера)
data - это передаваемые данные, в вашем случае xml
ret - ответ сервера

res должен быть равен 1, ret зависит от того, что вернет сервер

Еще зависит от того есть прокси сервер или нет. Если есть, то с ним тоже придется повозиться с параметрами
Старый 08.12.2014, 10:08   #2  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Спасибо за ответы.
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
X++:
WinInet winInet = new WinInet(...); //internetOpen вызывается в new
int hURL;
int hReq;
int res;
str ret;

 if (winInet.ok())
 {
        hURL = winInet.internetConnect(servername,80);
        hReq = winInet.OpenRequest(hURL, url, 'POST');
        res = winInet.SendRequest(hReq, hdr, data);
        ret = winInet.internetReadFile(hReq);
 }
Это по памяти написано или прямой копипаст из кода?
у меня нет методов winInet.OpenRequest и winInet.SendRequest. У меня есть winInet.httpSendRequest но у него порядок аргументов другой и один аргумент отличается
X++:
boolean  httpSendRequest(int _handler, BinData _file, int _size)
{
    return _httpSendRequest.call(_handler, "Content-Type: application/x-www-form-urlencoded", 47, _file, _size);
}
Если это прямой копипаст можете выслать свой класс WinInet?

Последний раз редактировалось smailik; 08.12.2014 в 10:12.
Старый 08.12.2014, 10:29   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от smailik Посмотреть сообщение
Спасибо за ответы.

Это по памяти написано или прямой копипаст из кода?
у меня нет методов winInet.OpenRequest и winInet.SendRequest.
Это копипаст. В стандартном классе WinInet таких методов нет, но без них POST не сделаешь, их нужно добавить. Посмотрите как сделаны другие методы этого класса и сделайте также. У меня 3.0, возможно в 2009 эти методы есть, только по другому называются.
Примерно вот так:
X++:
    _httpOpenRequest = new DLLFunction(_winInet, 'HttpOpenRequestA');
    _httpOpenRequest.returns(ExtTypes::DWord);
    _httpOpenRequest.arg(ExtTypes::DWORD);
    _httpOpenRequest.arg(ExtTypes::String);
    _httpOpenRequest.arg(ExtTypes::String);
    _httpOpenRequest.arg(ExtTypes::String);
    _httpOpenRequest.arg(ExtTypes::String);
    _httpOpenRequest.arg(ExtTypes::DWORD);
    _httpOpenRequest.arg(ExtTypes::DWORD);
    _httpOpenRequest.arg(ExtTypes::DWORD);

    _httpSendRequest = new DLLFunction(_winInet, 'HttpSendRequestA');
    _httpSendRequest.returns(ExtTypes::DWord);
    _httpSendRequest.arg(ExtTypes::DWord);
    _httpSendRequest.arg(ExtTypes::String);
    _httpSendRequest.arg(ExtTypes::DWord);
    _httpSendRequest.arg(ExtTypes::String);
    _httpSendRequest.arg(ExtTypes::DWord);

int OpenRequest(int hdl, str _url, str _verb = "POST", int flags = 0)
{
    ;
    return _httpOpenRequest.call(hdl, _verb, _url, '', '', 0, flags, 0);
}

int SendRequest(int handle, str hdr, str data)
{
    ;
    return _httpSendRequest.call(handle, hdr, strlen(hdr), data, strlen(data));
}
Либо воспользуйтесь классом XMLHTTPRequest, только он прокси-сервер не понимает

Последний раз редактировалось Lucky13; 08.12.2014 в 10:37.
За это сообщение автора поблагодарили: smailik (1).
Старый 08.12.2014, 16:02   #4  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
[xpp]
WinInet winInet = new WinInet(...); //internetOpen вызывается в new
У меня в new internerOpen не вызывается, т.е не прописано
X++:
strData = "url:/rest/2/authentication/createSession?account=ХХХ&login=ХХХ.dispatcher&password=ХХХ";
    url = "http://review.maxoptra.com/";
    if (winInetLocal.ok())
    {
        hURL = winInetLocal.internetOpen("http://review.maxoptra.com/", 1, "ХХХ", "ХХХ", 0); // вот тут ответ число есть
        hURL = winInetLocal.internetConnect("http://review.maxoptra.com/", "ХХХ", "ХХХ"); // а вот тут ответ 0
        hReq = winInetLocal.httpOpenRequest(hURL, url, 'POST');
        res = winInetLocal.httpSendRequest(hReq, hdr, strData); // и тут все по нулям
        ret = winInetLocal.internetReadFile(hReq); // и тут 0
    }
что то делаю не так?
Старый 09.12.2014, 11:21   #5  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от smailik Посмотреть сообщение
У меня в new internerOpen не вызывается, т.е не прописано
Возможно в 2009 по другому сделано, но функции winInet от этого не меняются. internetOpen вы, скорее всего вызвали правильно, далее internetConnect. Она должна получать handle, который вернула internetOpen, так как в new она у вас не вызывается, то как он передается в internetConnect? Далее я писал:
Цитата:
servername - адрес сервера (напр www.yandex.ru или ip) без http
а у вас как? Что за параметры XXX непонятно. Посмотрите не методы класса WinInet, а то, что в них написано и какие туда параметры отдаются.Что-то типа этого:
X++:
    return _internetConnect.call(hdl, serverName, port, _login, _pass, mode, 0, 0);
И зачем вы в OpenRequest опять весь адрес отдаете?
Теги
settimeout, webservice

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Standart Costing, Direct Costing и механизмы их реализации в Аксапте slava09 DAX: Функционал 55 05.06.2006 11:00
Система оповещений в Аксапте (события в Аксапте) raunio DAX: Прочие вопросы 1 29.09.2005 15:44
Аналитический учет в Аксапте. Анна DAX: Прочие вопросы 38 06.04.2005 14:04
Размышления на тему “Системы контроля версий в Аксапте”. Андре DAX: База знаний и проекты 31 07.02.2005 12:29
Скорость в Аксапте Алексей Контев DAX: Прочие вопросы 13 25.06.2002 14:37
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:04.