Как IIS знает, служит ли он веб-сайту или проекту веб-приложения?

Если они не упорядочены (например, Array(3, 1) совпадает с Array(1, 3)) и если в числах нет повторений, вы можете использовать subsets.

val a = Array(4, 3, 1)
val s = a.toSet.subsets.filter(_.nonEmpty).toList

println(s) // List(Set(4), Set(3), Set(1), Set(4, 3), Set(4, 1), Set(3, 1), Set(4, 3, 1))

Но это довольно сильные предположения, поэтому дайте мне знать, если одно из них не выполняется.

12
задан Deane 7 May 2009 в 20:50
поделиться

4 ответа

There is a subtle difference in the .aspx file that you'll find in these project types.

If you look at a Web Site Project you should see something like this...

<%@ Page Language="C#" AutoEventWireup="true"  
CodeFile="Default.aspx.cs" Inherits="_Default" %>

... where as the Web Application project will have .aspx files with something like this...

<%@ Page Language="C#" AutoEventWireup="true" 
CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>

Notice that the first has a CodeFile attribute, and the second as a CodeBehind attribute. This is where the distinction is made.

The CodeBehind attribute is NOT used at runtime - it's there to tell VS.NET where the code lives, and the Inherits attribute tells the runtime which class to go searching for in the binaries.

The CodeFile attribute IS used at runtime, and is used by the aspnet_compiler.exe to generate code, and then the Inherits attribute is used as above.

For more info on these attributes, look here...

http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx

But to answer your question "how does IIS know?" the answer is "it doesn't." ASP.NET knows.

You can prove that this is the case by doing the following:

  1. Create a new web application. This will include a Default.aspx and a Default.aspx.cs.
  2. Add the following code into Default.aspx.cs:

    protected void Page_Load(object sender, EventArgs e)
    {
     Response.Write ( "Привет");
    }
    
  3. Скомпилируйте проект, запустите его, см. текст «привет» появляется в браузере.

  4. Теперь измените код так, чтобы он выглядел вот так, и сохраните файл .cs:

     protected void Page_Load (отправитель объекта, EventArgs e)
    {
     Response.Write ( "до свидания");
    }
    
  5. НЕ СОБИРАЙТЕ. Обновите ваш браузер. Вы по-прежнему будете видеть "hello", потому что скомпилированный код все еще использует эту строку.

  6. Теперь измените атрибут в Default.aspx с CodeBehind на CodeFile. Сохраните этот файл.

  7. Обновите страницу в браузере. Вы увидите "до свидания".

  8. Измените "до свидания" в коде на "я верю!". Сохраните .aspx.cs, но не компилируйте.

  9. Обновите браузер, посмотрите «Я верю!» И танцуйте по комнате просветите: -)

21
ответ дан 2 December 2019 в 06:45
поделиться

Я уверен, что фреймворк это обрабатывает, и он прозрачен для IIS.

-2
ответ дан 2 December 2019 в 06:45
поделиться

Все, что делает IIS, - передает входящий запрос соответствующему обработчику. В случае сайта / приложения ASP.NET это aspnet_isapi.dll. Затем обработчик позаботится обо всем оттуда.

3
ответ дан 2 December 2019 в 06:45
поделиться

После компиляции веб-сайта или веб-приложения для веб-сервера нет никакой разницы. Обработчики .NET в IIS всегда:

  1. Компилируют страницы ASPX.
  2. Перетаскивают построенные сборки в область временных файлов.
  3. Выполните запрос

В тех случаях, когда сайт полностью компилируется в один dll существуют либо однострочные ASPX-файлы, сообщающие обработчикам .NET в IIS, где взять код. Или страницы ASPX могут быть удалены вместе с некоторыми дополнительными строками конфигурации в web.conig.

Но краткий ответ действительно после компиляции они идентичны.

1
ответ дан 2 December 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: