Проблема с параметром HttpWebRequest AsyncCallback - PullRequest
0 голосов
/ 29 июля 2011

Когда я пытаюсь нажать кнопку в первом методе, он создает асинхронный http-запрос внутри цикла. Но я не могу передать параметр в мою функцию асинхронного обратного вызова.Я хочу сделать что-то, я хочу отправить идентификаторы внутри цикла, используя метод POST.

    void Button3Click(object sender, EventArgs e)
    {            
        for(int i = Convert.ToInt32(startno3.Text); i<Convert.ToInt32(endno3.Text); i++) {                
            ASCIIEncoding encoding=new ASCIIEncoding();
            string postData="id=1";                
            qstr3 = encoding.GetBytes(postData);                

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/ornek/1.php");
            if(key1.Text!="") {
                request.Headers.Add("Cookie", "PHPSESSID=" + key1.Text);                    
            }
            request.Method = "POST";
            request.ContentType="application/x-www-form-urlencoded";
            request.ContentLength = data.Length;
            IAsyncResult asyncResult = request.BeginGetResponse( new AsyncCallback(EndScanFeeds), request);    
        }
    }

    public void EndScanFeeds(IAsyncResult result) {
        HttpWebRequest request = null;
        HttpWebResponse response = null;
        Stream stream = null;
        StreamReader streamReader = null;
        try {
            request = (HttpWebRequest)result.AsyncState;
            response = (HttpWebResponse)request.EndGetResponse(result);
            stream = response.GetResponseStream();
            streamReader = new StreamReader(stream);
            string feedData = streamReader.ReadToEnd();
            response.Close();
            stream.Close();
            streamReader.Close();
            MessageBox.Show(feedData);

        }
        catch(Exception ex) {
            throw(ex);
        }
        finally {
            if(response != null)
                response.Close();
            if(stream != null)
                stream.Close();
            if(streamReader != null)
                streamReader.Close();
        }
    }   c

Ответы [ 2 ]

0 голосов
/ 29 июля 2011

Почему вы не можете передать параметры в вашу функцию?Вы используете request в качестве второго параметра BeginGetResponse - вы можете вместо этого фактически передавать любой пользовательский объект, сохраняя ваши параметры и ссылку на запрос, и приводить result.AsyncState к этому типу объекта вместо приведения.на HttpWebRequest.

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

0 голосов
/ 29 июля 2011

Вам необходимо добавить идентификатор в качестве параметра строки запроса в запрос HttpWebRequest (вы ничего не делаете с qstr3 после его установки).

И пока вы устанавливаете ContentType и ContentLength, вы не передаете ему никакого реального контента.

Но что меня беспокоит, так это запуск (потенциально) множества простых асинхронных запросов HttpWeb параллельно. Если их будет значительное количество, я ожидаю, что начнут происходить плохие вещи.

Подумайте, правильный ли это подход. Можно ли изменить 1.php так, чтобы он занимал более одного идентификатора одновременно?

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