большие WCF-сервисы
Feb. 18th, 2010 | 11:41 pm
Все, кто занимался созданием приложений, работающих с большими данными, знают, что возвращаемый сервисом результат по умолчанию не может быть больше двух мегабайт, поэтому в описание биндинга в web.config привычно добавляем что-то вроде:
Тем не менее, в случае действительно больших таблиц этого оказывается недостаточным. По умолчанию установлено ограничение не только на общий объем передаваемых данных, но и на количество принимаемых элементов (655360). Поэтому в описание поведения сервиса надо добавить (или исправить) строку
<binding name="myBinding" maxBufferSize= "2147483647" maxReceivedMessageSize="214 7483647" maxBufferPoolSize="2147483647">Тем не менее, в случае действительно больших таблиц этого оказывается недостаточным. По умолчанию установлено ограничение не только на общий объем передаваемых данных, но и на количество принимаемых элементов (655360). Поэтому в описание поведения сервиса надо добавить (или исправить) строку
<dataContractSerializer maxItemsInObject Graph="5000000" />Link | | Add to Memories | Share
Преобразование типов
Nov. 24th, 2009 | 09:33 pm
В Silverlight часто приходится работать с объектами, не зная заранее их типа. Чтобы получить доступ ко всем методам соответствующего объекта, надо его преобразовать к правильному типу.
Первая мысль — использовать для этого прямой каст:
По-моему, для преобразования типов гораздо удобнее использовать оператор as. В отличие от прямого преобразования, в случае неудачи он не вызывает исключение, а возвращает null. То есть код выглядит таким образом:
Если преобразования типов применяются часто, то второй вариант делает код намного более читаемым.
Первая мысль — использовать для этого прямой каст:
Canvas cnvMap = (Canvas) LayoutRoot.Find Name("myCanvas"); Однако если такого объекта не существует или он имеет другой тип, такой каст выбросит исключение InvalidCastException. Таким образом, правильный код со временем превращается в нагромождение блоков try-catch.По-моему, для преобразования типов гораздо удобнее использовать оператор as. В отличие от прямого преобразования, в случае неудачи он не вызывает исключение, а возвращает null. То есть код выглядит таким образом:
Canvas cnvMap = LayoutRoot.FindName("myC anvas") as Canvas;
if (cnvMap != null)
{
выполняем нужные действия
}
else
{
обрабатываем ошибку
}
Если преобразования типов применяются часто, то второй вариант делает код намного более читаемым.
Link | Leave a comment | Add to Memories | Share
(no subject)
Nov. 7th, 2009 | 05:13 pm
Пару недель назад работал ночью над своим таймлайном на Silverlight. Запустив в очередной раз программу, обнаружил вот такую ошибку:

Вернул код к предыдущему состоянию, ошибка осталась точно такой же. Запустил Fiddler, он показал, что при попытке обратиться к xap-файлу сервер возвращает ошибку 500. Я попробовал загрузить этот файл браузером, вот что у меня получилось:

Проверил все таймеры и асинхронные вызовы функций: никаких проблем в коде. Открыл старый проект, код которого не менял уже неделю. Запустил — те же ошибки. В 2:45 я, наконец, понял в чем проблема. Перевод стрелок! Ушел из дома, погулять и подумать, а через двадцать минут все уже работало как раньше.
Граждане! Не программируйте во время перевода часов на зимнее время!

Вернул код к предыдущему состоянию, ошибка осталась точно такой же. Запустил Fiddler, он показал, что при попытке обратиться к xap-файлу сервер возвращает ошибку 500. Я попробовал загрузить этот файл браузером, вот что у меня получилось:

Проверил все таймеры и асинхронные вызовы функций: никаких проблем в коде. Открыл старый проект, код которого не менял уже неделю. Запустил — те же ошибки. В 2:45 я, наконец, понял в чем проблема. Перевод стрелок! Ушел из дома, погулять и подумать, а через двадцать минут все уже работало как раньше.
Граждане! Не программируйте во время перевода часов на зимнее время!
Link | Leave a comment | Add to Memories | Share
(no subject)
Nov. 6th, 2009 | 07:25 pm
Четыре года сюда не писал. В жизни все изменилось, а здесь все по-прежнему. Возвращаешься как в старый дом, где все знакомо и где давно не был. Оглядываешься, заново узнаешь вещи, которые когда-то были привычными, смотришь на свои старые работы — гордый из-за искренности и немного смущенный наивностью… Стараешься ничего не испортить, и в то же время начать все заново, с чистого листа.
Постараюсь и я. Блоггера из меня не получилось (этому есть с десяток подтверждений — например, все предыдущие записи. Да и эта, пожалуй), но и в управдомы переквалифицироваться еще рановато.
Пару месяцев назад мне понадобилось написать небольшое визуально-интерактивное приложение. Flash мне не понравился с первого взгляда, а вот Silverlight от Microsoft подошел идеально. Правда, не один десяток раз приходилось сталкиваться с тем, что элементарные вопросы отнимают много времени — слишком много там «дизайнеров» и слишком мало программистов. Здесь не будет «10000 примеров кода на Silverlight» и «Как написать Quake 4 на Silverlight 2.0» — а просто решения конкретных задач, с которыми мне приходилось сталкиваться.
Конечно, при случае поговорим о чем угодно. Зачем мне себя ограничивать? Ведь я же снова дома.
Постараюсь и я. Блоггера из меня не получилось (этому есть с десяток подтверждений — например, все предыдущие записи. Да и эта, пожалуй), но и в управдомы переквалифицироваться еще рановато.
Пару месяцев назад мне понадобилось написать небольшое визуально-интерактивное приложение. Flash мне не понравился с первого взгляда, а вот Silverlight от Microsoft подошел идеально. Правда, не один десяток раз приходилось сталкиваться с тем, что элементарные вопросы отнимают много времени — слишком много там «дизайнеров» и слишком мало программистов. Здесь не будет «10000 примеров кода на Silverlight» и «Как написать Quake 4 на Silverlight 2.0» — а просто решения конкретных задач, с которыми мне приходилось сталкиваться.
Конечно, при случае поговорим о чем угодно. Зачем мне себя ограничивать? Ведь я же снова дома.