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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.12.2014, 00:23   #1  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
smailik, а почему именно WinInet? Этого класса даже нет в стандартной AX 2009, подозреваю у вас доработка/апгрейд класса с AX 3.0/4.0.

Вот то же самое, но используя сборки .NET и класс WebRequest:
X++:
static void MicrosoftWebRequestSample(Args _args)
{
    System.Net.WebRequest           webRequest;
    System.Net.ICredentials         credentialCache;
    System.Net.HttpWebResponse      httpWebResponse;

    System.IO.Stream                stream;
    System.IO.StreamReader          streamReader;
    
    str postData;
    System.Byte[] byteArray;
    System.Text.Encoding    encodingUTF8;
    
    str statusDescription;
    str responseFromServer;
    ;

    //1. Создать запрос.
    webRequest = System.Net.WebRequest::Create("http://httpbin.org/post"); //этот веб-сервис отправляет в ответ данные, которые были направлены ему.
    webRequest.set_Method("POST");
    
    //2. Ввести данные к отправке и ковертировать их в массив байтов
    postData = "url:/rest/2/authentication/createSession?account=ХХХ&login=ХХХ.dispatcher&password=ХХХ";
    encodingUTF8 = System.Text.Encoding::get_UTF8();
    byteArray = encodingUTF8.GetBytes(postData);
    
    //3. Изменить свойства запроса: ContentType, ContentLength.
    webRequest.set_ContentType("application/x-www-form-urlencoded");
    webRequest.set_ContentLength(byteArray.get_Length());
    
    //4. Если требуется авторизация, то указать учетные данные.
    credentialCache =  System.Net.CredentialCache::get_DefaultCredentials();

    //5. Получить поток с данными.
    stream = webRequest.GetRequestStream();
    
    //6. Записать поток данных.
    stream.Write(byteArray, 0, byteArray.get_Length());
    
    //7. Закрыть поток.
    stream.Close();
    
    //8. Получить ответ.
    httpWebResponse = webRequest.GetResponse();

    //9. Отобразить статус.
    statusDescription = httpWebResponse.get_StatusDescription();
    info(strFmt("%1", statusDescription));

    //10. Получить поток с данными.
    stream = httpWebResponse.GetResponseStream();

    //11. Открыть поток с помощью StreamReader.
    streamReader = new System.IO.StreamReader(stream);

    //12. Прочитать содержимое.
    responseFromServer = streamReader.ReadToEnd();

    //13. Вывести содержимое в инфолог.
    info(strFmt("%1", responseFromServer));

    //14. Закрыть все.
    streamReader.Close();
    stream.Close();
    httpWebResponse.Close();
}
Там тестовый веб-сервис, он в ответ сразу отправляет данные, отправленные ему. У меня сейчас работает, проверьте может решение подойдет.

Честно содрал пример у Microsoft отсюда: http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx.
За это сообщение автора поблагодарили: smailik (1).
Старый 09.12.2014, 13:21   #2  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Цитата:
Сообщение от Kabardian Посмотреть сообщение
smailik, а почему именно WinInet? Этого класса даже нет в стандартной AX 2009, подозреваю у вас доработка/апгрейд класса с AX 3.0/4.0.
да в Ax 2009 этого класса нет, нашел где то на форуме xpo-шник. Пару методов переправлял. WinInet одно из первых на что наткнулся, на нем было много различных, но не подходящих мне примеров Пример у вас шикарный спасибо. Попробовал через него, почему то мне такая хрень возвращается пока с этим разбираюсь
X++:
hdr = "http://review.maxoptra.com/rest/2/authentication/createSession?accountID=XXX&user=XXX&password=XXX";
    url = "";
    strData = "";
    if (winInetLocal.ok())
    {
        //hnd  = winInetLocal.internetOpen("5.9.157.231:80", 1, "XXX", "XXX", 0); // ответ не 0
        hURL = winInetLocal.internetConnect("5.9.157.231:80", "XXX", "XXX"); // 0
        hReq = winInetLocal.httpOpenRequest(hURL, url, 'POST'); // 0
        res = winInetLocal.httpSendRequest(hReq, hdr, strData); // 0
        ret = winInetLocal.internetReadFile(hReq); // 0
    }
XXX - это типа маскировка логина пароля и аккаунта.
порылся порылся и нашел _handle = this.internetOpen("Axapta",0,"","",0); в new. В этом примере собираюсь передать только заголовок. но пока возвращает только нули
Старый 09.12.2014, 14:59   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от smailik Посмотреть сообщение
В этом примере собираюсь передать только заголовок. но пока возвращает только нули
Посмотрите что в методе internetConnect. Туда должен передаваться handle, url сервера, порт, логин, пароль, режим доступа. Я чуть раньше приводил вызов. У вас только 3 параметра при вызове, а в качестве остальных что передается? Порт через двоеточие в адресе не нужен. Если конечно эта строка в методе не парсится.
Теги
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, время: 20:17.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.