windows mobile 6.5 .net CF HttpWebRequest на один и тот же URL из двух разных тем - ошибки - PullRequest
0 голосов
/ 18 февраля 2011

У меня странная ситуация в моем приложении .NET CF 3.5 для Windows Mobile 6.5. У меня есть 2 темы.

В 1-й теме я делаю следующее:

try
{
  String url = "http://myserverurl";
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  _currentRequest = request;
  request.Timeout = 10000;

  response = (HttpWebResponse)request.GetResponse();
  ConnectionStatus connStatus = response.StatusCode == HttpStatusCode.OK;
  response.Close();
}
catch (Exception e)
{ 
  //log e
}
finally
{

}

В 2n потоке вызов WebService через класс, основанный на SoapHttpClientProtocol, сгенерированный ссылкой WebService.

soapClient.Url = "http://myserverurl";
soapClient.MethodOnWebService();

В обоих случаях URL-адрес одинаков. 1-й поток используется для проверки соединения. Он периодически выполняет WebRequest, чтобы проверить, доступен ли сервер, и отображает состояние соединения (не показано в коде). Второй поток вызывает WebService на том же сервере (URL). Я заметил, что когда один поток выполняет WebRequest, второй блокируется, или время отображается во время выполнения веб-метода. Они оба выглядят как мешающие друг другу. Зачем? Интересно, если стек Windows Mobile просто создает только одно сокетное соединение для обоих потоков, если он понимает, что оба идут к одному и тому же целевому IP: порту? Что насчет сессий? В настольной Windows я ожидал, что будет создано 2 сессии и как минимум 2 сокета на клиентском компьютере. У кого-нибудь есть советы о том, как Windows Mobile (или .NET CF) управляет соединениями и повторным использованием сокетов?

Привет

1 Ответ

1 голос
/ 18 февраля 2011

Я бы предположил, что где-то есть третий сеанс. То, что вы видите, скорее всего, из-за малоизвестной (пока она вас не кусает, как сейчас) рекомендации по ограничению соединения в HTTP-протоколе. В разделе 8.1.4 RFC2068 говорится «Однопользовательский клиент ДОЛЖЕН поддерживать НАИБОЛЕЕ 2 соединения с любым сервером или прокси-сервером» . Я сам испытывал такое же ограничение, последний раз на Windows Phone 7.

Предел лежит в WebRequest, и решение заключается в увеличении лимита:

// set connection limit to 5
ServicePointManger.DefaultConnectionLimit = 5;

См. Например эта старая запись в блоге от David Kline.

...