IIS网站没有自动启动

时间:2018-01-03 13:54:58

标签: c# asp.net iis

我努力让自己的IIS网站自动启动。我在其中使用Quartz.Net进行夜间任务但是它们没有运行,因为IIS在它们运行之前就将其处理掉了。我尝试通过执行以下操作将其设置为自动启动并保持runninig(使用这些instructions):

的applicationHost.config:

<configuration>
<configSections>

...

<system.applicationHost>

    <applicationPools>
        <add name="DefaultAppPool" enable32BitAppOnWin64="true" managedRuntimeVersion="v4.0" />
        <add name="ASP.NET v4.0" enable32BitAppOnWin64="false" managedRuntimeVersion="v4.0" />
        <add name="ASP.NET v4.0 Classic" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" />
        <add name="Classic .NET AppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" />
       ...
        <add name="AUTOSTARTSITE" autoStart="true" managedPipelineMode="Integrated" startMode="AlwaysRunning">
            <processModel identityType="NetworkService" />
        </add>
        <applicationPoolDefaults managedRuntimeVersion="v4.0">
            <processModel identityType="NetworkService" />
        </applicationPoolDefaults>
    </applicationPools>

   ...

    <sites>
        <site name="AUTOSTARTSITE" id="10" serverAutoStart="true" serviceAutoStartEnabled="true" serviceAutoStartProvider="StartUpCode">
            <application path="/" applicationPool="AUTOSTARTSITE">
                <virtualDirectory path="/" physicalPath="E:\websites\AUTOSTARTSITE" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:80:AUTOSTARTSITE.com" />
            </bindings>
            <traceFailedRequestsLogging enabled="true" />
            <logFile directory="%SystemDrive%\inetpub\logs\LogFiles" />
        </site>
        <siteDefaults>
            <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" />
            <traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" />
        </siteDefaults>
        <applicationDefaults applicationPool="DefaultAppPool" />
        <virtualDirectoryDefaults allowSubDirConfig="true" />
    </sites>

    <serviceAutoStartProviders>

         <add name="StartUpCode" type="StartUpCode, AUTOSTARTSITE" />

    </serviceAutoStartProviders>

    <webLimits />

</system.applicationHost>

...

这是我的启动代码。我没有放入命名空间,我记录它运行所以我可以确认该过程是否正常。不幸的是,它没有运行。

StartUpCode:

public class StartUpCode : System.Web.Hosting.IProcessHostPreloadClient
{
    readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    public void Preload(string[] parameters)
    {
        SetupJobs();
        logger.Info("Quartz Jobs Setup Successfully");
    }
}

尽管有这些变化,它仍然像以前一样运行。我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:0)

我认为要使所有这些东西正常工作,您需要为IIS安装应用程序初始化功能:

enter image description here

您可以找到有关它应该如何工作的更多详细信息here

我们普遍认为无论什么时候它都不起作用。所以这里有两个解决方案:

  1. 不要在IIS中运行调度程序,使用Windows服务或计划任务
  2. 写一个将再次成为Windows服务或计划任务的pinger。它可能与powershell一起向您的网站发出GET。这可以作为服务或计划任务再次运行。
  3. 我绝对希望选项1不依赖于IIS生命周期来进行关键调度操作。尽管这种使用IIS托管的方法仍然很受欢迎,但我们使用它的方法根据我的经验存在太多问题。

答案 1 :(得分:0)

我们使用Quartz也有同样的问题,原因是IIS池在一些空闲时间后关闭了。所以我们不得不阻止它关闭它对我们有用。

enter image description here

查找更多详情here