Artyom's profileDark BrandBlogListsGuestbookMore Tools Help

Dark Brand

Радио Microsoft

Artyom Krivokrisenko

Occupation
Location

фываывфвыаф

Привет

фывафыва фыва

фыва

фыва

фыва

ыфв а

фыва

ыфв

аыв ф

фыважлдоф ывалжд офывдлжа

Отладка веб-сайтов под IIS7

При отладке веб-сайта, работающего под IIS 7 возникает ошибка:

Ошибка при отладке веб-сайта под IIS7

---------------------------
Microsoft Visual Studio
---------------------------
The web server process that was being debugged has been terminated by Internet Information Services (IIS).  This can be avoided by configuring Application Pool ping settings in IIS.  See help for further details.
---------------------------
OK   Help  
---------------------------

Суть проблемы состоит в том что IIS периодически пингует рабочие процесы, и если рабочий процес не отвечает, он считает что рабочий процес повис и завершает его.

Решить это очень просто - достаточно отключить Ping в свойствах пула.

В Internet Information Services (IIS) Manager в разделе Application Pools нужно выбрать рабочий процес под которым выполняется веб-сайт, в контекстном меню выбрать Advanced Settings.

В появившемся диалоге установить свойству Ping Enabled значение False, или повысить значение Ping Maximum Response Time.

imageБлогун - монетизируем блоги

Включаем жесткую проверку типов для всего веб-сайта

Давно известна досадная ошибка ASP .NET 2.0. Допустим, в конфигурационном файле мы указываем, что хотим включить опцию Strict (жесткую проверку типов):

        <compilation strict="true" explicit="true">

К сожалению, эта опция будет работать только в коде который внедрен в ASPX-страницу. Код, который располагается в .vb-классах не подвергается дейсвтию этой опции. И чтоб иметь жесткую проверку типов, приходилось в каждом файле прописывать диррективу

Option Strict On

Не было предела моему разочарованию когда я обнаружил, что в Visual Studio 2008 эта ошибка так и не была исправлена smile_cry!

Но на сей раз мой пытливый разум не дал очередную команду писать в начале файла нужную директиву, а полез в 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-) smile_regular

Даный код проверен на .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" thumbs_up

Спецификация Visual Basic 9.0

Microsoft выложила спецификацию 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")
Я думаю это однозначно можно назвать кодом дня thumbs_up

Удаление дублирующихся записей в SSIS

Иногда при работе с ненормализоваными таблицами возникает необходимость удалить дублирующиеся записи. Рассмотрим пример.

У нас есть ненормализования таблица типа такой:

ID Имя Должность
1 Николай Разработчик
2 Алексей Веб-мастер
3 Владимир Разработчик
4 Геннадий Разработчик
5 Дмитрий Аналитик
6 Виталий Веб-мастер

Требуется сделать таблицу должностей такого вида:

ID Название должности
1 Разработчик
2 Веб-мастер
3 Аналитик

Задача решается очень просто, если в качестве источника данных выступает OLE DB Source - можно выполнить DISTINCT-запрос.

Если в качестве источника данных выступает, скажем, XML-файл, и возможности выполнить такой же запрос нет - прийдется поступить немного по-другому.

В данном случае источником будет выступать XML-файл:

image

Выбираем столбец который нам необходим - в данном случае это название категории

image

В моем случае в исходных данных встречаются одинаковые названия группы, написанные в разном регистре, то есть "Интернет" и "интернет" - для корректной работы все строки нужно привести в нижний регистр - разумеется, у вас такой необходимости может не быть. Для этого я использую трансформацию Derrived Column:

image

image

Для удаления дублирующихся записей используем трансформацию Sort с включенной опцией Remove rows with duplicate values.

image

image

И заключительный шаг - это выгрузка данных в приемник - в моем случае это таблица в базе SQL Server.

image

image

Все готово, запускаем SSIS Package:

image

Готово :)

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 небольших проблемы.

  • Функция нетипизирована - возвращает Object
  • IIf является обычной функцией - и поэтому при ее вызове вычисляется оба выражения - и для случая True и для False. То есть, мы не могли написать:
        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#.

Мое мнение - это полезное нововведение, уже использую smile_tongue

Еще пара слов о Lambda-выражениях

Итак, на данный момент в Visual Basic 9.0 (в отличие от C# 3.0) lambda-выражение может состоять только из одного выражения. И я сомневаюсь что это изменится к релизу. Так, для информации smile_sad.

Еще недавно на 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()

Вот такоое небольшое продолжение, если появится свободная минутка, попробую написать еще smile_regular.

А пока могу посоветовать почитать очень интересную статью про C# 3.0 на русском языке.

.NET Micro Framework

За время своего существования .NET Framework успел проникнуть практически везде - начиная с мобильных устройств и заканчивая высокопроизводительными серверами.

Но все-таки есть ряд устройств, куда .NET Framework путь пока был закрыт - это встраиваемые устройства smile_sad.

Но у меня ест хорошая новость - с помощью .NET Micro Framework вы сможете попасть и туда smile_regular.

Поддерживает процессоры ARM7 и ARM9.

Разработку можно вести на языке C#, прямо в Visual Studio, тестировать в эмуляторе.

SDK можно скачать здесь.

 
No list items have been added yet.
Дякуємо за відвідання!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.