۱۳۸۹/۱۰/۲۵

استفاده از IIS Express 7.5 در VS.NET


استفاده از IIS در VS.NET و پروژه‌هاي ASP.NET داستان خودش را دارد. در نگارش‌هاي 2002 و 2003 آن، تنها وب سرور قابل استفاده جهت كار با VS.NET همان IIS اصلي بود. مهم‌ترين مشكل اين روش، نياز به داشتن دسترسي مديريتي بر روي سيستم بود (كه در بعضي از شركت‌ها، اين مورد براي عموم كاربران ممنوع است) به همراه نصب جداگانه‌ و تنظيمات مخصوص IIS ، صرفا جهت آزمايش يك برنامه‌ي ساده؛ همچنين با توجه به اينكه IIS جزو كامپوننت‌ها ويندوز بوده و هر نگارشي، IIS خاص خودش را دار است، اين مورد هم مشكلات ويژه‌اي را به همراه دارد (براي مثال IIS5 ويندوز XP را با IIS7 ويندوز سرور 2008 در نظر بگيريد؛ يكي براي توسعه يكي جهت محيط كاري). اين روش در VS.Net 2005 كنار گذاشته شد و از وب سرور توكاري به نام Cassini يا ASP.NET Development Server استفاده گرديد. به اين صورت ديگر نيازي به نصب مجزاي IIS كامل جهت آزمايش‌ برنامه‌هاي ASP.NET نبود و همچنين نياز به داشتن دسترسي مديريتي الزامي نيز منتفي گرديد. اين روش هنوز هم تا نگارش 2010 ويژوال استوديو مرسوم است؛ اما ... اما كساني كه با Cassini كار كرده باشند مي‌دانند كه يك سري از رفتار‌هاي آن با IIS واقعي تطابق ندارد و اگر برنامه‌ي ASP.NET شما با Cassini خوب نمايش داده مي‌شود الزامي ندارد كه با IIS واقعي هم به همان نحو رفتار كند، براي نمونه رفتار مسيريابي آدرس‌هاي نسبي در IIS واقعي و Cassini يكي نيست. علاوه بر آن IIS هاي 7 و 7.5 هم امكانات و ويژگي‌هاي خاص خود را دارند كه Cassini آن‌ها را پوشش نمي‌دهد؛ به علاوه اين دو فقط در ويندوزهاي جديد مانند ويندوز سرور 2008 يا ويندوز 7 قابل دسترسي هستند. به همين جهت اخيرا يك نسخه‌ي سبك و express از IIS 7.5 به صورت جداگانه براي برنامه نويس‌ها فقط جهت آزمودن برنامه‌هاي خود تهيه شده‌ است و البته هدفگيري اصلي آن پروژه‌ي WebMatrix است؛ به همراه ويژگي‌هاي جديد IIS7 مانند امكان آزمودن تنظيمات ويژه IIS7 در وب كانفيگ برنامه، پشتيباني كامل از SSL ، Url Rewrite و ساير ماژول‌هاي IIS7، عدم نياز به دسترسي مديريتي براي اجراي آن، امكان اجراي آن بر روي پورت‌هاي مختلف بدون تداخل با وب سرور(هاي) موجود بر روي سيستم و همچنين برخلاف IIS7 اصلي، بر روي ويندوز XP نيز قابل اجرا است. حجم نگارش IIS Express 7.5 تنها 3.9 مگابايت است:


سرويس پك يك ويژوال استوديوي 2010 (كه در زمان نگارش اين مطلب نسخه‌ي بتاي آن ارائه شده)، يك گزينه‌ي جديد را به منوي كليك راست بر روي نام پروژه در VS.NET به نام Use IIS Express ، اضافه كرده است تا به سادگي بتوان از اين امكان جديد استفاده كرد (يا به عبارتي با IIS Express يكپارچه است و نياز به تنظيم خاصي ندارد).
در ساير حالات (و نسخه‌هايي كه اين يكپارچگي وجود ندارد و نخواهد داشت) به صورت زير مي‌توان عمل كرد:
روش اول:
دستور زير را در خط فرمان وارد نمائيد:
"C:\Program Files\IIS Express\iisexpress.exe" /path:D:\Prog\1389\MySite\ /port:4326 /clr:v4.0
به اين صورت وب سروري جهت ارائه‌ي سايتي با مسير ذكر شده بر روي پورت 4326 (http://localhost:4326/) بر اساس دات نت 4 تشكيل خواهد شد (براي نمونه جهت دات نت سه و نيم مقدار v3.5 را وارد نمائيد).

روش دوم (كه در حقيقت همان روش اول با ارائه‌ي پشت صحنه‌ي موقت آن است):
الف) ابتدا به مسير My Documents\IISExpress\config مراجعه كرده و فايل applicationhost.config را باز كنيد. سپس گره مربوط به site را يافته (حدود سطر 153) و گزينه‌ي serverAutoStart را حذف كنيد:
<site name="WebSite1" id="1">
<application path="/">
<virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:localhost" />
</bindings>
</site>
ب) سپس تنظيمات سايت مورد نظر خود را به صورت دستي به اين فايل اضافه كنيد. براي مثال:
<site name="WebSite2" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="D:\Prog\1389\MyTestSite\" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":1389:localhost" />
</bindings>
</site>
توضيحات:
Name در اينجا نامي دلخواه است كه وارد خواهيد نمود.
Id شماره سايتي است كه ثبت خواهد شد.
applicationPool در اينجا بسيار مهم است. اگر سايت شما مبتني بر دات نت 4 است، Clr4IntegratedAppPool را وارد نمائيد و اگر غير از اين است، Clr2IntegratedAppPool بايد تنظيم شود.
physicalPath همان مسير پروژه شما است.
در قسمت bindingInformation هم مي‌توان شماره پورت مورد نظر را وارد كرد.

اكنون فايل applicationhost.config را ذخيره كرده و ببنديد.
سپس دستور زير را در خط فرمان ويندوز وارد نمائيد:
"C:\Program Files\IIS Express\iisexpress.exe" /site:WebSite2
كه در اينجا WebSite2 همان مدخل جديدي است كه به فايل applicationhost.config اضافه شده است. به اين صورت آدرس http://localhost:1389/ جهت دسترسي به سايت شما آماده استفاده خواهد بود.

تنظيمات ديباگر VS.NET :
تا اينجا تنها موفق شده‌ايم كه اين وب سرور آزمايشي را راه اندازي كنيم. اما نكته‌ي مهم امكان ديباگ كردن برنامه توسط آن‌را از دست داده‌ايم. براي اين منظور در VS.NET به خواص پروژه، برگه‌ي Web آن مراجعه كنيد. در قسمت Servers گزينه‌ي use custom web server را انتخاب كرده و آدرسي را كه در يكي از دو روش فوق ساخته‌ايد وارد نماييد. براي مثال http://localhost:4326/
همچنين بايد دقت داشت كه در همين قسمت هيچكدام از debuggers ذيل گزينه‌ي use custom web server نبايد تيك خورده باشند (چون VS.NET دقيقا نمي‌داند كه بايد به كدام پروسه در ويندوز attach شود).
اكنون برنامه را در حالت ديباگ در VS.NET آغاز كنيد (بديهي است فرض بر اين است كه iisexpress.exe با تنظيمات ذكر شده بايد در حال اجرا باشد).
و ... حداقل مزيت آن بسيار سريع‌تر بودن اين روش نسبت به Cassini يا ASP.NET Development Server است.
تا اينجا فقط VS.NET به صورت خودكار مرورگر را باز كرده و سايت نمايش داده مي‌شود؛ اما اگر در قسمتي از كدهاي خود breakpoint قرار دهيم كار نمي‌كند. براي اين منظور بايد در حين اجراي برنامه، از منوي debug ، گزينه‌ي attach to process را انتخاب كرده و به iisexpress متصل شويد.