How do I control the AppPool used for deploy through VS & MSDeploy settings

后端 未结 2 1102
迷失自我
迷失自我 2020-12-31 00:33

When I build a deploy package for my webapp the package contains an archive.xml file that contains the following:



        
相关标签:
2条回答
  • 2020-12-31 01:01

    Trouble found me when I was web deploying from Visual Studio 2010 sp1 the c# WCF service I was creating as instructed in: http://technologyriver.blogspot.fi/2012/02/prerequisites-check-windows-7.html

    I got the error: Error 1 Web deployment task failed. (The application pool that you are trying to use has the 'managedRuntimeVersion' property set to 'v2.0'. This application requires 'v4.0'.) 0 0 WcfService3

    As I do not have full IIS but the IIS Express I cannot go to the manager. After some dates with mr. Google and ms. Bing I found the solution, staring at my face.

    The fix is to use the explicitly correct web service name instead of the default used in the example.

    Solution: First open the IIS Express config file %userprofile%\documents\IISExpress\config\applicationhost.config

    Check the default site that you have in there, in my case it was:

    <site name="WebSite1" id="1" serverAutoStart="true">
      <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
      </application>
      <bindings>
        <binding protocol="http" bindingInformation=":8080:localhost" />
      </bindings>
    </site>
    

    Ensure that the application pool for the site is correct, in my case "Clr4IntegratedAppPool"

    In the deployment phase, as instructed in the linked blog, there is used as Site/application some "Default Web Site/MyApp".

    For me the correct setting, as seen in the site config, would be "WebSite1" and also the service url in the deployment needs port binding and would be in my case "localhost:8080"

    If you feel that you want more definition, create a completely new site with its own pool in the config and use that in the deployment. Some examples to that direction can be found here: http://www.philliphaydon.com/2012/06/multiple-iisexpress-sites-profiled-with-dottrace/

    Hope this helps any of you avoiding the frustrating dates with search machines.

    Best regards, Petteri Kujala

    0 讨论(0)
  • I'm also starting to look into the possibilities on how to accomplish this.

    I've still some research to do, but I can give you the following pointers:

    1. IncludeAppPool=true enable the AppPoolExtension which also copies the app pool when synching a web site from one location to the other. I guess it will not have an effect when creating a package. Unless maybe if you WAP is run via your local IIS and you include IIS Settings in your package.

    2. Parameters.xml exists in the zip indeed. But if you place a Parameters.xml file in the root of your WAP you can specify your own parameters which will be merged with the one VS creates when packaging.

    3. You can indeed check "Include application pool settings used by this Web project" (in fact: this sets the msbuild property IncludeAppPool to true). The manifest will then hold a entry for creating the app-pool. This is however only possible if you are creating the package from a machine that also locally runs the WAP. This is not an option when working with a build server which is my case

    4. It could be possible to make a batch script to run msdeploy from the commandline and use the AppPool provider to create the apppool. Although this seems a bit clunky to me as I'd like to include the apppool creation inside the manifest of my VS (or build server) generated package

    5. I'm right now investigating if it would be possible to insert the apppoolconfig provide inside my manifest using a wpp.targets file (more info here and here

    I might get back to you if I find how to do it.

    Edit:

    I've found out that there is no way you can package the creation of a new app pool using the appPoolConfig provider. I was forced to write my own provider. I did that based on some (very basic) examples I found and by reverse engineering some of the existing providers. What I basically did was create a wrapper class that calls c:\windows\system32\inetsrv\appcmd and exposed this functionallity as a MSDeploy provider. appcmd is a commandline tool to configure iis, with it you can create apppools... If anyone's interested I could share some of the code...

    Hi, another edit

    I'm sorry it took me so long but I've put some of my code my custom AppPoolConfigProvider on my skydrive you can access it here Or here is a gist repo to access it.

    To use this provider, should place your compiled dll under an Extensibility folder (you have to create it yourself under "c:\Program Files (x86)\IIS\Microsoft Web Deploy V2\"). You can find more info about this online.

    I use the provider in my xxx.wpp.targets file like this:

    <Target Name="AddConfigAppPool" Condition="'$(RunConfigAppPool)'">
    <Message Text="Adding configAppPool provider" />
    <ItemGroup>
      <MsDeploySourceManifest Include="configAppPool">
        <path>@(__DefaultDeployEnvironmentSetting->'%(AppPoolName)')</path><!-- Represents the name of the AppPool, required-->
        <managedRuntimeVersion>$(DeployManagedRuntimeVersion)</managedRuntimeVersion>
        <managedPipelineMode>$(DeployManagedPipelineMode)</managedPipelineMode>
        <processModel_identityType>@(__DefaultDeployEnvironmentSetting->'%(AppPoolIdentyType)')</processModel_identityType>
        <processModel_userName>@(__DefaultDeployEnvironmentSetting->'%(AppPoolUserName)')</processModel_userName>
        <processModel_password>@(__DefaultDeployEnvironmentSetting->'%(AppPoolUserPassword)')</processModel_password>
        <processModel_idleTimeout>00:00:00</processModel_idleTimeout>
        <AdditionalProviderSettings>managedRuntimeVersion;managedPipelineMode;processModel_identityType;processModel_userName;processModel_password;processModel_idleTimeout</AdditionalProviderSettings>
        <!--Possible additional provider settings: queueLength,autoStart,enable32BitAppOnWin64,managedRuntimeVersion,managedRuntimeLoader,enableConfigurationOverride,managedPipelineMode,CLRConfigFile,passAnonymousToken,startMode,processModel_identityType,processModel_userName,processModel_password,processModel_loadUserProfile,processModel_logonType,processModel_manualGroupMembership,processModel_idleTimeout,processModel_maxProcesses,processModel_shutdownTimeLimit,processModel_startupTimeLimit,processModel_pingingEnabled,processModel_pingInterval,processModel_pingResponseTime,recycling_disallowOverlappingRotation,recycling_disallowRotationOnConfigChange,recycling_logEventOnRecycle,recycling_periodicRestart_memory,recycling_periodicRestart_privateMemory,recycling_periodicRestart_requests,recycling_periodicRestart_time,recycling_periodicRestart_schedule_[value='timespan']_value,failure_loadBalancerCapabilities,failure_orphanWorkerProcess,failure_orphanActionExe,failure_orphanActionParams,failure_rapidFailProtection,failure_rapidFailProtectionInterval,failure_rapidFailProtectionMaxCrashes,failure_autoShutdownExe,failure_autoShutdownParams,cpu_limit,cpu_action,cpu_resetInterval,cpu_smpAffinitized,cpu_smpProcessorAffinityMask,cpu_smpProcessorAffinityMask2-->      
      </MsDeploySourceManifest>    
    </ItemGroup>
    

    I'm sorry I can't eleborate more on this, but it's been a while since I wrote this code and I simply do not have the time. You can find some info online about creating custom providers. If you have additional questions, I'll try to answer when I have time available.

    Hope this helps

    0 讨论(0)
提交回复
热议问题