Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение к LongPoll серверу vk.com, Ожидание ответа от сервера  
:(
    Опции темы
maxnoskov
Дата 23.10.2014, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

Репутация: нет
Всего: нет



Подскажите пожалуйста, как правильно организовать подключение к LongPoll серверу вконтакте. Из документации:
Цитата

Для подключения Вам нужно составить запрос следующего вида:
http://{$server}?act=a_check&key={$key}&ts={$ts}&wait=25&mode=2 

Где вместо {$...} - соответствующий параметр, полученный методом messages.getLongPollServer  


Все параметры имеются в наличии.

Цитата

Принцип работы Long Poll соединения заключается в том, что сервер, получив запрос, удерживает его до тех пор, пока не произойдёт событие или не истечёт время, указанное в параметре wait (Так как некоторые прокси серверы обрывают соединение по истечении 30 секунд - мы советуем указывать wait=25).
  

Как реализовать post запрос и ожидание ответа сервера в течение 25 секунд, не могу разобраться.

Цитата

Как только клиент получает ответ, он может послать новый запрос, указав в параметре ts новое значение, полученное в ответе, для получения новых событий.  

PM MAIL   Вверх
WERITAS
Дата 24.10.2014, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



POST-запрос можно организовать двумя способами: через TcpClient и через HttpWebRequest. Вы каким способом пробовали? У вас есть пример сессии (запрос-ответ) для подключения к серваку?



--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
maxnoskov
Дата 24.10.2014, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

Репутация: нет
Всего: нет



Через HttpWebResponse
Код

public static HttpWebResponse PostMethod(string postedData, string postUrl)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl);
            request.Method = "POST";
            request.Timeout = 25000;
            request.Credentials = CredentialCache.DefaultCredentials;

            UTF8Encoding encoding = new UTF8Encoding();
            var bytes = encoding.GetBytes(postedData);

            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = bytes.Length;

            using (var newStream = request.GetRequestStream())
            {
                newStream.Write(bytes, 0, bytes.Length);
                newStream.Close();
            }
            return (HttpWebResponse)request.GetResponse();
        }

И потом 
Код

var resp = PostMethod("?act=a_check&key=" + response.Key +"&ts=" + response.Ts + "&wait=25&mode=2", "http://" + response.Server);
            var strreader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);
            var respstring = strreader.ReadToEnd();

Ответ соответственно пустой
PM MAIL   Вверх
WERITAS
Дата 27.10.2014, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



В снифере не пробовали смотреть? Вообще сервак хоть что-то отвечает? Каковы значения полей resp.StatusCode и resp.StatusDescription?


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
maxnoskov
Дата 27.10.2014, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

Репутация: нет
Всего: нет



Цитата(WERITAS @ 27.10.2014,  06:01)
В снифере не пробовали смотреть? Вообще сервак хоть что-то отвечает? Каковы значения полей resp.StatusCode и resp.StatusDescription?

Странное дело, попробывал через WebClient. Если всю строку указывать в ApiUrl, то работает, но если разбивать на ApiUrl и data, то пустой ответ.

Код

//Url запроса
var ApiUrl = "http://" + response.Server + "?act=a_check&key=" + response.Key + "&ts=" + response.Ts + "&wait=25&mode=2";
//Данные для запроса - пока пустые
string data = "";

WebClient client = new WebClient();
// Указываем кодировку
client.Encoding = System.Text.Encoding.UTF8;
// Отправляем запрос и получаем ответ
string reply = client.UploadString(ApiUrl, data);

PM MAIL   Вверх
WERITAS
Дата 27.10.2014, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Цитата(maxnoskov @  24.10.2014,  12:46 Найти цитируемый пост)
 var strreader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8); var respstring = strreader.ReadToEnd();

Попробуйте вместо вызова метода strreader.ReadToEnd();читать порциями типа так:
Код

List<string> strList = new List<string>();
string line = strreader.ReadLine();
while (line != null)
{
     strList.Add(line);
     line = streamReader.ReadLine();
     if (strList.Count == 3000)
    break;
}

Каковы значения полей resp.StatusCode и resp.StatusDescription? 

Цитата(maxnoskov @  27.10.2014,  11:39 Найти цитируемый пост)
Странное дело, попробывал через WebClient. Если всю строку указывать в ApiUrl, то работает,

В сниффере сравните запросы в первом и втором случаях, может быть какого-нибудь заголовка не хватает (или наоборот лишний).


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.