نماد سایت بلاگ ایران هاست

راه اندازی ASP.Net Core به وسیله IIS در Nano Server

aspnet-core-10-4-638

نصب Reverse Forwarder  :

Reverse Forwarders هم به صورت آنلاین (ماشین روشن و در حال کار) و هم به صورت آفلاین (ماشین خاموش) قابل نصب می باشد.

در حالت آفلاین، Reverse Forwarders  با اضافه کردن پارامتر –ReverseForwarders به هنگام خواندن دستور New-NanoServerImage از طریق cmdlet قابل نصب می باشد مانند :

New-NanoServerImage -MediaPath f:\ -BasePath .\Base -TargetPath .\Nano1.vhd -GuestDrivers -Packages Microsoft-NanoServer-IIS-Package –ReverseForwarders

در حالت آنلاین، می توان با فراخوانی پکیج مربوطه به همراه دستور dism آن را نصب نمود.

dism /online /add-package /packagepath:c:\packages\Microsoft-OneCore-ReverseForwarders-Package.cab

dism /online /add-package /packagepath:c:\packages\en-us\Microsoft-OneCore-ReverseForwarders-Package.cab

<reboot>

در این مورد، c:\packages مسیر لوکالی می باشدکه برای مسیری که پکیچ مربوطه را از نانو سرور کپی شده است ایجاد کرده ایم.

بعد از نصب Reverse Forwarders چه به صورت آنلایت یا آفلاین، از طریق اجرای دستور زیر می توانید مطمئن شوید که IIS و Reverse Forwarders  به درستی نصب شده اند

dism /online /get-packages

پس از اجرای فرمان شما می بایست Language packs for Microsoft-NanoServer-IIS-Package  و Microsoft-OneCore-ReverseForwarders-Package را مشاهده کنید

نصب HttpPlatformHandler

در حال حاضر نصب HttpPlatformHandler  در نانو فقط به صورت دستی امکان پذیر می باشد .

با توجه به اینکه نانو فقط در ورژن ۶۴ بیت وجود دارد بنابرین شما می بایست آخرین ورژن ۶۴ بیت HttpPlatformHandler  را در یک ماشین عادی( غیر Nano ) نصب کنید که از لینک زیر می توانید دانلود نمائید:

http://www.iis.net/downloads/microsoft/httpplatformhandler

پس از اینکه ورژن x64 از HttpPlatformHandler  بر روی ماشین عادی ( غیر Nano ) شما نصب شد، ۲ فایل وجود دارد که می بایست در ماشین نانو کپی کنیم :

در ماشین نانو شما نیاز دارید که آن دو فایل را در مکان مرتبط به خودشان کپی نمائید.( dll->inetsrv, schema file->inetsrv\config\schema )

فعال نمودن HttpPlatformHandler ( PowerShell )

شما می توانید مراحل زیر را از طریق ارتباط ریموت PowerShell به ماشین نانو سرور اجرا نمائید.

توجه نمائید که مراحل زیر در سیستمی که برای اولین بار این کار را انجام می دهید عمل خواهد کرد، در صورتی که شما این عملیات را چندین بار تکرار نمائید باعث ایجاد چندین ورودی خواهد شد و به مشکل برخورد خواهید کرد. در صورتی که در چنین وضعیتی قرار گرفته اید می توانید از بک آپ applicationhost.config استفاده نمائید که در مسیر %systemdrive%\inetpub\history قرار دارد.

Import-Module IISAdministration

$sm = Get-IISServerManager

# Add AppSettings section (for Asp.Net Core)

$sm.GetApplicationHostConfiguration().RootSectionGroup.Sections.Add(“appSettings”)

# Unlock handlers section

$appHostconfig = $sm.GetApplicationHostConfiguration()

$section = $appHostconfig.GetSection(“system.webServer/handlers”)

$section.OverrideMode=”Allow”

# Add httpPlatform section to system.webServer

$sectionHttpPlatform = $appHostConfig.RootSectionGroup.SectionGroups[“system.webServer”].Sections.Add(“httpPlatform”)

$sectionHttpPlatform.OverrideModeDefault = “Allow”

# Add to globalModules

$globalModules = Get-IISConfigSection “system.webServer/globalModules” | Get-IISConfigCollection

New-IISConfigCollectionElement $globalModules -ConfigAttribute @{“name”=”httpPlatformHandler”;”image”=”%SystemRoot%\system32\inetsrv\httpPlatformHandler.dll”}

# Add to modules

$modules = Get-IISConfigSection “system.webServer/modules” | Get-IISConfigCollection

New-IISConfigCollectionElement $modules -ConfigAttribute @{“name”=”httpPlatformHandler”}

$sm.CommitChanges()

فعال نمودن HttpPlatformHandler  ( به صورت دستی و از طریق ویرایش applicationhost.config  )

در صورتی که مراحل بالا را برای فعال نمودن HttpPlatformHandler دنبال نموده اید نیازی به انجام این مرحله نمی باشد.

پیشنهاد می شود که مرحله PowerShell  را برای فعال نمودن دنبال نمائید اما در صورتی که به هر دلیل باید applicationhost.config را ویرایش نمائید طبق مراحل زیر می بایست انجام دهید :

مسیر زیر را باز نمائید :

c:\windows\system32\inetsrv\applicationHost.config

زیر تگ <configSections> مقدار زیر را وارد نمائید :

<configSections>

          <section name=”appSettings” />

در قسمت system.webServer مقدار handlers را از Deny  به Allow تغییر دهید:

<section name=”handlers” overrideModeDefault=”Allow” />

در قسمت system.webServer بخش جدیدی را برای httpPlatform  ایجاد نمائید :

<section name=”httpPlatform” overrideModeDefault=”Allow” />

</sectionGroup>

مقدار زیر را برای globalModules  اضافه نمائید :

<add name=”httpPlatformHandler” image=”%SystemRoot%\system32\inetsrv\httpPlatformHandler.dll” />

</globalModules>

مقدار زیر را برای modules اضافه نمایئد :

<add name=”httpPlatformHandler” />

</modules>

نصب اپلیکیشن Asp.Net Core

در ابتدا، اطمینان حاصل نمائید که اپلیکیشنAsp.Net Core  ورژن coreclr و x64 باشد.

این مورد از این جهت بسیار مهم می باشد که دیگر ترکیبات بر روی نانو عمل نخواهد کرد.

پس از ایجاد coreclr/x64 باید تمام اپلیکیشن را به ماشین نانو کپی نمائید. در این مثال از دایرکتوری c:\HelloAspNetCore استفاده می کنیم.

در مرحله بعد وب سایتی ایجاد می کنیم و آن را به آدرسc:\HelloAspNetCore\wwwroot  پوینت می نمائیم، پورت ۸۰۰۰ را برای این وب سایت استفاده می کنیم ( برای سادگی کار با Default App Pool  کار می کنیم )

استفاده کردن از پورت پیش فرض ۸۰ هم مشکلی برای راه اندازی Asp.Net Core ایجاد نمی کند. اما با این وجود در محیط تست ما ترجیح دادیم که اپلیکیشن Asp.Net Core  را از Default Website  جدا کنیم تا در زمان وقوع مشکل عیب یابی آن سریعتر صورت گیرد.( شما می توانید مطمئن شوید که default IIS site به درستی کار می کند )

با استفاده از PowerShell :

Import-module IISAdministration

New-IISSite -Name “AspNetCoreSite” -PhysicalPath c:\HelloAspNetcore\wwwroot -BindingInformation “*:۸۰۰۰:”

ایجاد سایت به صورت دستی ( در صورتی که از روش بالا از PowerShell استفاده نکرده اید ) از طریق ویرایش فایل c:\windows\system32\inetsrv\applicationHost.config :

<sites>

            <site name=”Default Web Site” id=”۱″>

                        <application path=”/”>

                                    <virtualDirectory path=”/” physicalPath=”%SystemDrive%\inetpub\wwwroot” />

                        </application>

                        <bindings>

                                    <binding protocol=”http” bindingInformation=”*:۸۰:” />

                        </bindings>

            </site>

            <site name=”AspNetCoreSite” id=”۲″>

                        <application path=”/”>

                                    <virtualDirectory path=”/” physicalPath=”C:\HelloAspNetCore\wwwroot” />

                        </application>

                        <bindings>

                                    <binding protocol=”http” bindingInformation=”*:۸۰۰۰:” />

                        </bindings>

            </site>

            … rest of xml…

</sites>

قدم بعدی این است که پورت ۸۰۰۰ را باز کنیم:

New-NetFirewallRule -Name “AspNetCore” -DisplayName “HTTP on TCP/8000” -Protocol tcp -LocalPort 8000 -Action Allow -Enabled True

رفع عیب

ابتدا اطمینان حاصل نمائید که خود IIS به درستی نصب شده است. http://<ipaddress> می بایست صفحه پیش فرض را باز نماید ( صفحه آبی IIS ) در غیر این صورت یک یا چند مورد ابتدایی را به درستی کانفیگ نکرده اید.

ثانیا چک نمائید که اپلیکیشن شما می تواند به صورت Standalone اجرا گردد. به عنوان مثال : c:\HelloAspNetCore\approot\web.cmd

سوما چک نمائید که لاگ هایی که توسط HttpPlatformHandler  در حال ایجاد شدن می باشد را می توانید مشاهده کنید: c:\HelloAspNetCore\logs

خروج از نسخه موبایل