Не могу получить более 2 ответов на запросы http от одного хоста

Я хочу отправить 3 или 4 HTTP-запроса в цикле и, когда ответ получен, прочитать данные из потока каждого из них. Проблема в том, что ВСЕГДА только 2 из ответов получены.

protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        SetContentView (Resource.Layout.Main);
        Button button = FindViewById<Button> (Resource.Id.myButton);

        button.Click += delegate 
        {
            Task.Run(() => this.DoRequestData());
            Task.Run(() => this.DoRequestData());
            Task.Run(() => this.DoRequestData());
            Task.Run(() => this.DoRequestData());
        };
    }

    private void DoRequestData()
    {
        // !!! problem occurs if URL contains SAME ip and port and ANY OTHER path !!!
        var reqPath = "http://10.0.10.96:80/path";
        WebRequest request = WebRequest.Create(reqPath);

        HttpWebRequest httpRequest = request as HttpWebRequest;

        request.BeginGetResponse (res => this.OnResponse(res), request);
    }

    private void OnResponse (IAsyncResult result)
    {
        WebRequest request = (WebRequest)result.AsyncState;
        string reqStr = request.RequestUri.ToString ();

        WebResponse response;
        BinaryReader dataReader;

        if (TryGetResponseOrError (result, out response, reqStr)) 
        {
            while(true)
            {
                byte[] bytes = dataReader.ReadBytes(200);

                if(bytes.Length != 200)
                {
                    return;
                }
            }
        } 
    }

    private static bool TryGetResponseOrError (IAsyncResult result, out WebResponse response, string reqStr)
    {
        response = null;

        try
        {
            WebRequest request = (WebRequest)result.AsyncState;
            response = request.EndGetResponse (result);
            return true;
        }
        catch(WebException ex) 
        {

        }

        return false;
    }

Метод обратного вызова OnResponse всегда вызывается только 2 раза, независимо от того, сколько запросов было отправлено. Код содержится в переносимой библиотеке и отлично работает в iOS (через Xamarin.IOS). Помогите пожалуйста.

1 ответ

Решение

Служба поддержки Xamarin опубликовала сообщение об ошибке: https://bugzilla.xamarin.com/show_bug.cgi?id=23541

Другие вопросы по тегам