Асинхронный ввод-вывод (чтение потока из асинхронного веб-запроса) - PullRequest
0 голосов
/ 07 ноября 2010

При попытке асинхронной публикации данных я столкнулся с небольшой проблемой. Вот код:

    public string PostHTTP(string http, string data)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(http);
        postData = data;
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.BeginGetResponse(new AsyncCallback(GetRequestStreamCallback), request);
        allDone.WaitOne();
        Referer = http;
        return information;
    }

    private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
        Stream postStream = request.EndGetRequestStream(asynchronousResult); //Here is problem
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        postStream.Write(byteArray, 0, postData.Length);
        postStream.Close();
        request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
    }

Ошибка, которую я получаю:

Невозможно привести объект типа «System.Net.HttpWebResponse» к типу «System.Exception».

В чем проблема?

Ответы [ 2 ]

1 голос
/ 07 ноября 2010

Посмотрите на образец здесь . Попробуйте вызвать EndGetResponse для объекта запроса вместо EndGetRequestStream. Затем, если это выполняется успешно, вы можете позвонить GetResponseStream.

1 голос
/ 07 ноября 2010

В вашем методе PostHTTP() вы вызвали BeginGetResponse(), но в обратном вызове вы используете EndGetRequestStream().Это совершенно разные операции.Разве вы не должны использовать EndGetResponse()?Или, по крайней мере, начать с BeginGetRequest()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...