?

Log in

AlexWWolf's live journal

Свежие записи

Январь, 1, 2016

2016 Это специальная, вынесенная наверх запись - для того, чтобы можно было в комментах задать мне вопрос на произвольную тему. Или просто чего-нибудь написать. Ну и пусть будет деление по годам.

Май, 26, 2016

Обнаружил сегодня достаточно неприятную вещь: при использовании в нескольких потоках независимых запросов через HttpWebRequest/HttpWebResponse, они начинают блокировать друг друга. Насколько я понял, это связано с реализацией требований стандартов HTTP/1.x, согласно которым разрешается не более 2 одновременных подключений между парой "клиент-сервер" с использованием протокола HTTP. Подробней можно прочитать в RFC 2616, раздел 8.1.4. Вообще говоря, современные браузеры не соблюдают это ограничение, однако классы HttpWebRequest/HttpWebResponse активно поддерживают лимит на активные соединения (он может быть увеличен, но значение по умолчанию =2). При достижении лимита, последующие запросы зависают в состоянии ожидания. В случае превышения срока таймаута, запросы могут быть закрыты с исключением таймаута.

Небольшой пример для демонстрации проблемы:

using System;
using System.IO;
using System.Net;
using System.Threading;

namespace ConsoleApplication3
{
    class Program
    {
        private static string sBlock = "";

        static void Main(string[] args)
        {
            for(int i = 0; i < 2; i++)
                new Thread(DoRequest).Start(i);

            Console.ReadLine();
        }

        private static void DoRequest(object o)
        {
            try
            {
                lock (sBlock)
                    Console.WriteLine("Started " + (int)o);

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://yandex.ru");
                request.Timeout = 10 * 1000;
                WebResponse response = request.GetResponse();
                Stream s = response.GetResponseStream();
                Thread.CurrentThread.Join(30 * 1000);
                new StreamReader(s).ReadToEnd();
                response.Close();

                lock (sBlock)
                    Console.WriteLine("Completed " + (int)o);
            }
            catch (Exception ex)
            {
                lock (sBlock)
                    Console.WriteLine(ex.ToString());
            }
        }
    }
}


Май, 14, 2016

Недавно наткнулся на такую проблему: при работе с WCF-сервисом, построенным по модели WCF RESTful, и передачей данных в формате XML, часть полей на стороне сервиса оказывалась незаполненной. То есть, клиент отправляет нормально сформированный объект, сериализация на стороне клиента проходит штатно, XML формируется валидный, на стороне сервиса исключений не возникает, но объект данных формируется только частично заполненный. Каждый раз пропускаются одни и те же поля для одного и того же типа объектов; для разных типов объектов пропускается разное количество полей.

Продолжение здесь...Свернуть )

Май, 7, 2016

Скоро лето

Поделиться
Скоро лето
Яблони начинают цвести

Декабрь, 31, 2015

2015 - год быка

Поделиться
 Это специальная, вынесенная наверх запись - для того, чтобы можно было в комментах задать мне вопрос на произвольную тему. Или просто чего-нибудь написать. Ну и пусть будет деление по годам.
Счастья, успехов, и удачи всем в Новом Году!

Декабрь, 10, 2015

38

Поделиться
Поздравляю меня с днем рождения!

UPD: Всем спасибо за поздравления!

Ноябрь, 24, 2015

Цитата дня

Поделиться
xxx: Хорошо, что в нашей жизни нет магии с фаерболами.
yyy: ага
xxx: Тут у меня девочка пытается запросы к базе писать.
xxx: Она бы себя уже по десять раз аннигилировала вместе со зданием.

(r) bash.im

Октябрь, 17, 2015

pugixml

Поделиться
В поисках бесплатной C++-библиотеки для работы с XML, нашел pugixml. Как сказано в описании - "леговесный, простой и быстрый XMl-парсер с поддержкой XPath". Скомпилировался из исходников без проблем, буду пробовать.

жж счетчик - lj counter

Разработано LiveJournal.com