06 November, 2010

Недоделки которые сильно портят мнение пользователя о продукте

К моему глубокому сожалению поддержка профайлера в .NET Compact Framework v3.5.7283 содержит серьезную ошибку, которая увы делает невозможным корректную профиляцию в tracing режиме, если в коде кидаются exception которые не ловятся в той же функции где возникают. Как выяснилось причина в том, что необходимые нам нотификации из ICorProfilerCallback::ExceptionXXX просто не приходят. Получается, что наш продукт не виноват, но пользователю-то все равно кто виноват, программа же не работает. Обидно...

03 November, 2010

О культуре работы с реестром

Хотел озвучить одну вещь, которая меня крайне раздражает в некоторых программах, а именно нежелание за собой чистить реестр после деинсталляции и после окончания работы. На днях очень тесно столкнулся с этим. У пользователей наш dotTrace переставал нормально работать сразу после использования сторонних профайлеров (однозначно это было замечено за YourKit и ANTS от RedGate).

23 April, 2010

Выплыл однако

Ух, 2 недели тяжелой, глубокой и безостановочной отладки и ... инструментация для Silverlight 4.0 практически готова. С другой стороны в этом есть и свои плюсы - получил гору бесценного опыта.

30 March, 2010

Своя личная NTLM authentication в remoting (Часть №1)

Задача поставлена, теперь как бы ее так реализовать с использованием того-же NegotiateStream но уже поверх remoting. Сперва наперво должно прийти понимание, что наш NegotiateStream будет работать только с некоторыми стримами: NetworkStream или PipeStream. FileStream, MemoryStream не годятся категорически. Можно еще нагородить что-то свое, но это довольно долго. Сперва напишем интерфейс общения клиента и сервера.

Вольности в метаданных

Ну как всегда, напишешь что-нибудь хорошее, а на каких-то исходных данных оно не работает. Вот и с метаданными произошла такая засада: некоторые .NET компиляторы именуют главный metadata stream не #~ как все белые люди, а так сказать упрощенно, для бедных: #-

08 March, 2010

NTLM Authentication просто и со вкусом

Я довольно долго искал простой и стандартный путь для того чтобы произвести аутентификацию пользователя (текущий пользователь - вы не знаете его пароля и пользователь заданный при помощи NetworkCredential) на удаленном компьютере. Хотел уже было все написать ручками через AcquireCredentialsHandle/InitializeSecurityContext/AcceptSecurityContext/CompleteAuthToken, но совсем неожиданно нашел NegotiateStream - который и занимается данным непростым процессом. По сему поводу написал маленький примерчик (пример работает только в пределах одного компьютера, если хотите большего, то замените NamedPipeXxxStream на Socket).

03 March, 2010

Object synchronization method was called from an unsynchronized block of code

Симптомы: Посредством remoting вы создаете Mutex на удаленной машине все работает хорошо, но в один прекрасный момент при попытке вызвать ReleaseMutex вы получаете exception "Object synchronization method was called from an unsynchronized block of code". Ошибка плавающая, возникает время от времени и не на всех компьютерах.

Диагноз: ReleaseMutex вызывается не из того же thread что и вызов WaitOne так как никто не гарантирует, что отдельные remoting вызовы будут работать в том же thread.

Лечение: Можно нагородить на удаленной машине объект, который будет обеспечивать тот же тред для вызывов WaitOne и ReleaseMutex. А можно просто заменить Mutex на Semaphore...

15 February, 2010

Выравнивание в CLR и в C/C++

Столкнулся вот с проблемой: нужно было установить однозначное соответствие структуры в C/C++ и в CLR, структурка небольшая вот такого вида:
#pragma pack(push, PPP)
struct XXX
{
    LPVOID m_AAA;
    ULONG m_BBB;
    ULONG m_CCC;
    ULONG m_DDD;
};
#pragma pack(pop)