Artyom's profileDark BrandBlogListsGuestbookMore ![]() | Help |
Dark BrandРадио Microsoft |
|||||||||||||||||||||||||||||||||||
|
|
фываывфвыафПривет фывафыва фыва фыва фыва фыва ыфв а фыва ыфв аыв ф фыважлдоф ывалжд офывдлжа Отладка веб-сайтов под IIS7При отладке веб-сайта, работающего под IIS 7 возникает ошибка:
--------------------------- Суть проблемы состоит в том что IIS периодически пингует рабочие процесы, и если рабочий процес не отвечает, он считает что рабочий процес повис и завершает его. Решить это очень просто - достаточно отключить Ping в свойствах пула. В Internet Information Services (IIS) Manager в разделе Application Pools нужно выбрать рабочий процес под которым выполняется веб-сайт, в контекстном меню выбрать Advanced Settings. В появившемся диалоге установить свойству Ping Enabled значение False, или повысить значение Ping Maximum Response Time.
Включаем жесткую проверку типов для всего веб-сайтаДавно известна досадная ошибка ASP .NET 2.0. Допустим, в конфигурационном файле мы указываем, что хотим включить опцию Strict (жесткую проверку типов): <compilation strict="true" explicit="true"> К сожалению, эта опция будет работать только в коде который внедрен в ASPX-страницу. Код, который располагается в .vb-классах не подвергается дейсвтию этой опции. И чтоб иметь жесткую проверку типов, приходилось в каждом файле прописывать диррективу Option Strict On Не было предела моему разочарованию когда я обнаружил, что в Visual Studio 2008 эта ошибка так и не была исправлена Но на сей раз мой пытливый разум не дал очередную команду писать в начале файла нужную директиву, а полез в Live Search в поисках решения. И оно нашлось! Необходимо внести некоторые изменения в конфигурационный файл. В web.config который идет в шаблоне веб-сайта в Visual Studio 2008 имеется следующий код: <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/warnaserror-" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <providerOption name="CompilerVersion" value="v3.5"/> </compiler> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" compilerOptions="/optioninfer+" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <providerOption name="CompilerVersion" value="v3.5"/> </compiler> </compilers> </system.codedom> Необходимо всего лишь добавить еще одну опцию компиляции (отмечено жирным): <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/warnaserror-" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <providerOption name="CompilerVersion" value="v3.5"/> </compiler> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" compilerOptions="/optioninfer+ /optionstrict+" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <providerOption name="CompilerVersion" value="v3.5"/> </compiler> </compilers> </system.codedom> Вот и все, теперь во всех .vb-файлах по умолчанию применяется жесткая проверка типов (разумеется кроме тех в которых эта опция отключена директивой Option Strict Off). Также можно отключить опцию неявной типизации, если кому-то сильно мешает, (/optioninfer-) Даный код проверен на .NET Framework 3.5. Если вы продолжаете использовать .NET Framework 2.0 то скорее всего он будет немного отличаться. <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/warnaserror-" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> </compiler> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" compilerOptions="/optionstrict+" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> </compiler> </compilers> </system.codedom>Под 2.0 не проверял, так что используйте на страх и риск :) RSS - это просто. С Visual Basic 9.0Понадобилось быстренько сделать RSS-фид на сайте. Первая мысль которая пришла в голову - разумеется, взять rss toolkit и с его помощью быстренько все сделать. Но тут пришла в голову дерзкая мысль и... получилось это: Dim RssContent = <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>Feed Title</title> <description>Feed Description</description> <link>http://mysite.ru/</link> <pubDate><%= DateTime.Now.ToString("r") %></pubDate> <lastBuildDate><%= DateTime.Now.ToString("r") %></lastBuildDate> <generator>BetaCode RSS Generator</generator> <%= From a In Answers _ Select <item> <title><%= a.ShortQuestion %></title> <link><%= "http://mysite.ru/Question.aspx?id=" + a.id.ToString %></link> <description><%= context.Server.HtmlDecode(a.Question) + " <a href='http://mysite.ru/Question.aspx?id=" + a.id.ToString + "'>читать далее</a>" %></description> <category><%= a.Category1.name %></category> <guid><%= "http://mysite.ru/Question.aspx?id=" + a.id.ToString %></guid> <pubDate><%= If(a.DateCreated, DateTime.Now).ToString("r") %></pubDate> </item> %> </channel> </rss> RssContent.Save(context.Response.Output)Не спорю - это не самый правильный и оптимальный метод генерации RSS. Но зато как красиво демонстрирует по сути неограниченые возможности легендарного "Deep XML Support" Спецификация Visual Basic 9.0Microsoft выложила спецификацию Visual Basic 9.0 - 338 страниц в формате doc. Качаем, читаем. Генерация XML в VB 9.0В .NET существует немало способов генерации XML-файлов - начиная от доблесной конкатенции строчек и заканчивая использованием навороченой объектной модели XML DOM. Предлагаю еще один способ который появился в Visual Basic 9.0: Dim Root As New DirectoryInfo("D:\Work\output\sites\") Dim X = <Sites> <Groups> <%= From Gr _ In Root.GetDirectories _ Select <Group name=<%= Gr.Name %>> <%= From St _ In Gr.GetDirectories _ Select <Site name=<%= St.Name %>/> %> </Group> %> </Groups> </Sites> X.Save("sites.txt")Я думаю это однозначно можно назвать кодом дня Удаление дублирующихся записей в SSISИногда при работе с ненормализоваными таблицами возникает необходимость удалить дублирующиеся записи. Рассмотрим пример. У нас есть ненормализования таблица типа такой:
Требуется сделать таблицу должностей такого вида:
Задача решается очень просто, если в качестве источника данных выступает OLE DB Source - можно выполнить DISTINCT-запрос. Если в качестве источника данных выступает, скажем, XML-файл, и возможности выполнить такой же запрос нет - прийдется поступить немного по-другому. В данном случае источником будет выступать XML-файл:
Выбираем столбец который нам необходим - в данном случае это название категории
В моем случае в исходных данных встречаются одинаковые названия группы, написанные в разном регистре, то есть "Интернет" и "интернет" - для корректной работы все строки нужно привести в нижний регистр - разумеется, у вас такой необходимости может не быть. Для этого я использую трансформацию Derrived Column:
Для удаления дублирующихся записей используем трансформацию Sort с включенной опцией Remove rows with duplicate values.
И заключительный шаг - это выгрузка данных в приемник - в моем случае это таблица в базе SQL Server.
Все готово, запускаем SSIS Package:
Готово :) TraceroutНа днях коллега обратился с вопросом - как в .NET сделать Traceroute? Вот, набросал небольшой пример. Конечно, нужно "обработать напильником", но отправной точкой, думаю, может служить. Dim Host As String = "88.212.201.1" Dim Buffer = New Byte(1023) {} Dim HostPing As New NetworkInformation.Ping Dim hostResult = HostPing.Send(Host) For TTL = 1 To 127 - hostResult.Options.Ttl Dim Ping As New System.Net.NetworkInformation.Ping Dim Options As New PingOptions(TTL, True) Dim Result = Ping.Send(Host, 2000, Buffer, Options) Console.WriteLine(Result.Address) Next Обзор Visual Basic 9.0. Часть 2Давно обещал написать продолжение своего обзора, но сначала не было вдохновения, потом желания, потом времени, потом опять времени, но сейчас кажется выпала свободная минутка, и, пока мой компьютер занимается сложными вычислениями, напишу еще про несколько интересных нововведений в Visual Basic 9.0. Оператор IfВсе прекрасно знают зачем нужен этот оператор. Для чего же еще его можно использовать в VB 9.0? Все помнят давно существующую в языке BASIC функцию IIf. Фукнция хорошая, позволяла экономить немного кода. Но есть с ней 2 небольших проблемы.
Console.WriteLine(IIf(User IsNot Nothing, User.Name, "User Unknown")) поскольку в том случае, если User - это Nothing, получили бы NullReferenceException. Вобщем, совершенно неприспособленая к .NET фукнция. Поэтому я, например, ее вообще не использовал. Теперь вместо IIf можно использовать If как функцию. На самом деле, конечно, это не функция, а синатксическая конструкция. Dim CurrentUser As String = If(User IsNot Nothing, User.Name, "User Unknown") Данный вызов будет корректно работать в том случае если User - это Nothing. И, как видите, фукнция типизирована, то есть нет необходимости в дополнительных преобразованиях. Как это работает? Я так полагаю на этапе компиляции эта конструкция преобразуется в что-то типа: If User IsNot Nothing Then CurrentUser = User.Name Else CurrentUser = "User Unknown" End If Второй вариант использования данной конструкции - с двумя аргументами: Dim UserAge As Integer? Dim Age = If(UserAge, 0) Если первый аргумент не Nothing, он возвращается, если Nothing, то возвращается второй аргумент. Функция также типизирована, и что хотелось бы отметить - если в фукнцию передается Nullable-тип, то возвращается уже обычный, те Nullable. Вобщем теперь в VB 9.0 появились аналоги синатксических конструкция ?: и ?? из C#. Мое мнение - это полезное нововведение, уже использую Еще пара слов о Lambda-выраженияхИтак, на данный момент в Visual Basic 9.0 (в отличие от C# 3.0) lambda-выражение может состоять только из одного выражения. И я сомневаюсь что это изменится к релизу. Так, для информации Еще недавно на MSDN появилась очень интересная статья про lambda-выражения в VB 9.0, советую ознакомиться. Анонимные типыВозможно, вы уже слышали об этом нововведении. В VB 9.0 появилась возможность использовать так называемые анонимные типы - сами типы не нужно объявлять, компилятор сам сгенерирует их декларации. Данная возможность широко используется в LinQ, что я постараюсь рассмотреть чуть позже, а вот пока небольшой пример. Dim User = New With {.Name = "Artyom", .Age = 20} Dim Country = New With {.Name = "Ukraine", .Population = 48000000} Console.WriteLine("User {0}, Age: {1}", User.Name, User.Age) Console.WriteLine("{0}, Population: {1}", Country.Name, Country.Population) Console.ReadLine() Вот такоое небольшое продолжение, если появится свободная минутка, попробую написать еще А пока могу посоветовать почитать очень интересную статью про C# 3.0 на русском языке. Tags: Visual Basic 9.0 .NET Micro FrameworkЗа время своего существования .NET Framework успел проникнуть практически везде - начиная с мобильных устройств и заканчивая высокопроизводительными серверами. Но все-таки есть ряд устройств, куда .NET Framework путь пока был закрыт - это встраиваемые устройства Но у меня ест хорошая новость - с помощью .NET Micro Framework вы сможете попасть и туда Поддерживает процессоры ARM7 и ARM9. Разработку можно вести на языке C#, прямо в Visual Studio, тестировать в эмуляторе. SDK можно скачать здесь. Tags: .NET Micro Framework |
|
|||||||||||||||||||||||||||||||||
|
|