Всем привет. Работаю с яндексом по http с помощью WebRequest и на коротких ответах на POST-запрос приложение зависает на минуту в последней итерации чтения из потока (там, где будет numberOfBytesRead = 0) Все варианты перепробовал, надежда только на общественность.
При чтении результата в ответ на GET все хорошо, причем ответ такой же длины. Да что уж там, он идентичен.
| Код | using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse()) { using (var documentStream = webResponse.GetResponseStream()) { using (var ms = new MemoryStream()) { var bytesToRead = new byte[buferSize]; var numberOfBytesRead = 0; do { numberOfBytesRead = documentStream.Read(bytesToRead, 0, buferSize); //<--- зависает на последней итерации ms.Write(bytesToRead, 0, numberOfBytesRead); } while (numberOfBytesRead > 0);
ms.Seek(0, SeekOrigin.Begin); using (var sr = new StreamReader(ms, Encoding.UTF8)) { var documentXmlString = sr.ReadToEnd(); sr.Close(); result = XDocument.Parse(documentXmlString); } } } }
|
Вот так я создаю запрос:
| Код | private HttpWebRequest CreateRequest(string url, HttpMethod method, AuthorizationOptions authorization, string content) { var result = (HttpWebRequest)HttpWebRequest.Create(url); result.Method = method.ToString(); result.ContentType = "application/atom+xml; charset=utf-8; type=feed"; result.KeepAlive = false; result.AllowWriteStreamBuffering = false; result.Proxy = GlobalProxySelection.GetEmptyWebProxy();
if (method == HttpMethod.POST) result.ContentType = "application/atom+xml; charset=utf-8; type=entry"; result.ServicePoint.Expect100Continue = false;
if (authorization == AuthorizationOptions.Required) result.Headers.Add("Authorization", string.Format("FimpToken realm=\"fotki.yandex.ru\", token=\"{0}\"", _authorizationContext.Token));
if (!string.IsNullOrEmpty(content)) { var queryBytes = Encoding.UTF8.GetBytes(content); result.ContentLength = queryBytes.Length; result.GetRequestStream().Write(queryBytes, 0, queryBytes.Length); }
return result; }
|
|