Не могу получить более 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