Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
168 changes: 168 additions & 0 deletions aspnet/hosting/aspnet-core-module.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
ASP.NET Core Module Configuration Reference
=============================================

By `Luke Latham`_, `Rick Anderson`_ and `Sourabh Shirhatti`_

In ASP.NET Core, the web application is hosted by an external process outside of IIS. The ASP.NET Core Module is an IIS 7.5+ module which is responsible for process management of ASP.NET Core http listeners and to proxy requests to processes that it manages. This document provides an overview of how to configure the ASP.NET Core Module for shared hosting of ASP.NET Core.

.. contents:: Sections:
:local:
:depth: 2

Installing the ASP.NET Core Module
----------------------------------

Install the `.NET Core Windows Server Hosting <http://go.microsoft.com/fwlink/?LinkId=798480>`__ bundle on the server. The bundle will install the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module.

Configuring the ASP.NET Core Module
-----------------------------------

The ASP.NET Core Module is configured via a site or application *web.config* file and has its own configuration section within ``system.webServer - aspNetCore``.

Configuration Attributes
^^^^^^^^^^^^^^^^^^^^^^^^^

+---------------------------+----------------------------------------------------+
| Attribute | Description |
+===========================+====================================================+
| processPath | | Required string attribute. |
| | | |
| | | Path to the executable or script that will launch|
| | | a process listening for HTTP requests. |
| | | Relative paths are supported. If the path |
| | | begins with '.' the path is considered to be |
| | | relative to the site root. |
| | | |
| | | There is no default value. |
+---------------------------+----------------------------------------------------+
| arguments | | Optional string attribute. |
| | | |
| | | Arguments to the executable or script |
| | | specified in **processPath**. |
| | | |
| | | The default value is an empty string. |
+---------------------------+----------------------------------------------------+
| startupTimeLimit | | Optional integer attribute. |
| | | |
| | | Duration in seconds for which the |
| | | the handler will wait for the executable or |
| | | script to start a process listening on |
| | | the port. If this time limit is exceeded, |
| | | the handler will kill the process and attempt to |
| | | launch it again **startupRetryCount** times. |
| | | |
| | | The default value is 120. |
+---------------------------+----------------------------------------------------+
| shutdownTimeLimit | | Optional integer attribute. |
| | | |
| | | Duration in seconds for which the |
| | | the handler will wait for the executable or |
| | | script to gracefully shutdown when the |
| | | *app_offline.htm* file is detected |
| | | |
| | | The default value is 10. |
Copy link
Copy Markdown
Collaborator

@guardrex guardrex May 29, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Default value is 120 according to the file I have here.

<attribute name="startupTimeLimit" type="uint" defaultValue="120" validationType="integerRange" validationParameter="0,3600"/> <!-- in seconds -->

+---------------------------+----------------------------------------------------+
| startupRetryCount | | Optional integer attribute. |
| | | |
| | | The number of times the handler will try to |
| | | launch the process specified in **processPath**. |
| | | See **startupTimeLimit** for details. |
| | | |
| | | The default value is 10. |
+---------------------------+----------------------------------------------------+
| rapidFailsPerMinute | | Optional integer attribute. |
| | | |
| | | Specifies the number of times the process |
| | | specified in **processPath** is allowed to crash |
| | | per minute. If this limit is exceeded, |
| | | the handler will stop launching the |
| | | process for the remainder of the minute. |
| | | |
| | | The default value is 10. |
+---------------------------+----------------------------------------------------+
| requestTimeout | | Optional timespan attribute. |
| | | |
| | | Specifies the duration for which the |
| | | ASP.NET Core Module will wait for a response |
| | | from the process listening on |
| | | %ASPNETCORE_PORT%. |
| | | |
| | | The default value is "00:02:00". |
+---------------------------+----------------------------------------------------+
| stdoutLogEnabled | | Optional Boolean attribute. |
| | | |
| | | If true, **stdout** and **stderr** for the |
| | | process specified in **processPath** will be |
| | | redirected to the file specified in |
| | | **stdoutLogFile**. |
| | | |
| | | The default value is false. |
+---------------------------+----------------------------------------------------+
| stdoutLogFile | | Optional string attribute. |
| | | |
| | | Specifies the relative or absolute file path for |
| | | which **stdout** and **stderr** from the process |
| | | specified in **processPath** will be logged. |
| | | Relative paths are relative to the root of the |
| | | site. Any path starting with '.' will be |
| | | relative to the site root and all other paths |
| | | will be treated as absolute paths. |
| | | |
| | | The default value is ``aspnetcore-stdout``. |
+---------------------------+----------------------------------------------------+
| forwardWindowsAuthToken | | True or False. |
| | | |
| | | If true, the token will be forwarded to the |
| | | child process listening on %ASPNETCORE_PORT% as a|
| | | header 'MS-ASPNETCORE-WINAUTHTOKEN' per request. |
| | | It is the responsibility of that process to call |
| | | CloseHandle on this token per request. |
| | | |
| | | The default value is false. |
+---------------------------+----------------------------------------------------+

Copy link
Copy Markdown
Collaborator

@guardrex guardrex May 29, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The section above didn't include shutdownTimeLimit and processesPerApplication.

<attribute name="shutdownTimeLimit" type="uint" defaultValue="10" validationType="integerRange" validationParameter="0,600"/> <!-- in seconds -->
<attribute name="processesPerApplication" type="uint" defaultValue="1" validationType="integerRange" validationParameter="1,100"/>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shutdownTimeLimit was an accidental omission. I will update

processesPerApplication was intentionally left out. It is an artifact of forking form httpPlatformHandler. At the moment, we don't recommend you use it with ASP.NET Core applications

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a specific reason not to use it?

Child Elements
^^^^^^^^^^^^^^^

+---------------------------+----------------------------------------------------+
| Attribute | Description |
+===========================+====================================================+
| environmentVariables | | Configures **environmentVariables** collection |
| | | for the process specified in **processPath**. |
+---------------------------+----------------------------------------------------+
| recycleOnFileChange | | Specify a list of files to monitor. If any of |
| | | these files get updated/deleted, the Core Module |
| | | will restart the backend process. |
+---------------------------+----------------------------------------------------+

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The section didn't include recycleOnFileChange

<element name="recycleOnFileChange">
  <collection addElement="file" clearElement="clear">
    <attribute name="path" type="string" required="true" validationType="nonEmptyString" expanded="true"/>
  </collection>
</element>

ASP.NET Core Module *app_offline.htm*
--------------------------------------

If you place a file with the name *app_offline.htm* at the root of a web application directory, the ASP.NET Core Module will attempt to gracefully shut-down the application and stop processing any new incoming requests. If the application is still running after ``shutdownTimeLimit`` number of seconds, the ASP.NET Core Module will kill the running process.

While the *app_offline..htm* file is present, the ASP.NET Core Module will repond to all requests by sending back the contents of the *app_offline.htm* file. Once the *app_offline.htm* file is removed, the next request loads the application, which then responds to requests.


ASP.NET Core Module configuration examples
-------------------------------------------

.. _log-redirection:

Log creation and redirection
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Capitalization?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As per the MS style guide, we only capitalize the proper nouns in headings, so "Log creation and redirection" is the correct way.

Copy link
Copy Markdown
Collaborator

@guardrex guardrex May 31, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

my bad ... I should have checked

[EDIT] Oh! 😄 I totally dorked this. I'll get an issue opened for the IIS doc to fix the headings soon.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In our unpublished style guide :--))

^^^^^^^^^^^^^^^^^^^^^^^^^^^^

For logs to be saved, you must create the log directory. The ASP.NET Core Module can redirect ``stdout`` and ``stderr`` logs to disk by setting the ``stdoutLogEnabled`` and ``stdoutLogFile`` attributes of the ``aspNetCore`` element. Logs are not rotated. It is the responsibilty of the hoster to limit the disk space the logs consume.

.. literalinclude:: aspnet-core-module/sample/web.config
:language: xml
:lines: 12-15,19


Setting environment variables
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The ASP.NET Core Module allows you specify environment variables for the process specified in the ``processPath`` setting by specifying them in ``environmentVariables`` child attribute to the ``aspNetCore`` attribute.

.. literalinclude:: aspnet-core-module/sample/web.config
:language: xml
:lines: 12-19
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,18 @@
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="httpplatformhandler"
<add name="aspNetCore"
path="*" verb="*"
modules="httpPlatformHandler"
modules="AspNetCoreModule"
resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="..\approot\web.cmd"
arguments=""
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="true"
stdoutLogFile="..\logs\stdout"
startupTimeLimit="3600">
stdoutLogFile=".\logs\stdout">
<environmentVariables>
<environmentVariable name="DEMO" value="demo_value" />
</environmentVariables>
</httpPlatform>
</aspNetCore>
</system.webServer>
</configuration>
47 changes: 0 additions & 47 deletions aspnet/hosting/http-platformhandler.rst

This file was deleted.

2 changes: 1 addition & 1 deletion aspnet/hosting/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ The hosting docs provide an overview of how to host ASP.NET Core. ASP.NET hostin
.. toctree::
:titlesonly:

http-platformhandler
aspnet-core-module
directory-structure
apppool
servicing
Expand Down
3 changes: 2 additions & 1 deletion aspnet/tutorials/nano-server.rst
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ If you have successfully connected then your prompt will look like this ``[10.83
Installing the HttpPlatformHandler Module
-----------------------------------------

The :ref:`HttpPlatformHandler <http-platformhandler>` is an IIS 7.5+ module which is responsible for process management of HTTP listeners and to proxy requests to processes that it manages. At the moment, the process to install the HttpPlatformHandler Module for IIS is manual. You will need to install the latest 64-bit version of the `HttpPlatformHandler <http://www.iis.net/downloads/microsoft/HttpPlatformHandler>`_ on a regular (not Nano) machine. After installing you will need to copy the following files:
The HttpPlatformHandler is an IIS 7.5+ module which is responsible for process management of HTTP listeners and to proxy requests to processes that it manages. At the moment, the process to install the HttpPlatformHandler Module for IIS is manual. You will need to install the latest 64-bit version of the `HttpPlatformHandler <http://www.iis.net/downloads/microsoft/HttpPlatformHandler>`_ on a regular (not Nano) machine. After installing you will need to copy the following files:
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Comma

After installing, you will ...



* *%windir%\\System32\\inetsrv\\HttpPlatformHandler.dll*
* *%windir%\\System32\\inetsrv\\config\\schema\\httpplatform_schema.xml*
Expand Down