|
09.12.2014, 00:23 | #1 |
Талантливый разгвоздяй
|
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 |
Участник
|
Цитата:
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 } порылся порылся и нашел _handle = this.internetOpen("Axapta",0,"","",0); в new. В этом примере собираюсь передать только заголовок. но пока возвращает только нули |
|
09.12.2014, 14:59 | #3 |
Участник
|
Посмотрите что в методе internetConnect. Туда должен передаваться handle, url сервера, порт, логин, пароль, режим доступа. Я чуть раньше приводил вызов. У вас только 3 параметра при вызове, а в качестве остальных что передается? Порт через двоеточие в адресе не нужен. Если конечно эта строка в методе не парсится.
|
|