برای ویرایش آن یعنی تغییر مسیر فیزیکی هم میتوان از طریق مسیر زیر عمل کرد
Right Click On virtual Directory>Manage Virtual Directory >Advanced Settings
از این پس در IIS دسترسی به پوشه، از طریق ~/media میسر هست؛ ولی بسیاری از ما برای تست، برنامه را از طریق IIS Express اجرا و تست میکنیم. پس بهتر هست این گزینه در آنجا هم مورد بررسی قرار بگیرد.
برای دسترسی به کانفیگ iis express عموما مسیرهای زیر معتبر هستند:
%userprofile%\documents\iisexpress\config\applicationhost.config %userprofile%\my documents\iisexpress\config\applicationhost.config
فایل applicationhost.config فایلی است که قرار است تغییر بدهیم.
ولی اگر مسیرهای بالا راهگشا نبود، برای پیدا کردن فایلهای کانفیگ میتوانید از طریق آیکن IIS Express که حین اجرای پروژه در notification area باز میشود نیز اقدام کرد.
یک context menu از طریق این آیکن باز کرده و گزینهی show all applications را انتخاب کنید. لیست تمامی سایتهای در حال اجرا نمایش داده میشود. یکی را انتخاب کنید تا در زیر اطلاعات نمایش یابد. در قسمت کانفیگ، آدرس فایل کانفیگ داده شده است و مسیر نیز مشخص است. با کلیک بر روی آن فایل applicationhost.config باز میشود.
فایل مورد نظر را باز کنید. این فایل را میتوان با نوت پد یا یک xml editor گشود. در آن یک تگ sites وجود دارد که تمامی پروژههای تحت وبی را که تا الان دارید، درون خودش ذخیره کردهاست. به ازای هر سایت یک تگ site هست و خصوصیات هر کدام، داخل این تگ قرار گرفتهاست. اگر دقت کنید هر پروژه شما یا همان تگ site، شامل تگ زیر میباشد:
<application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="E:\website\oscar\panel\Oscar_Manager\Oscar_Manager" /> </application>
در اینجا خود IIS Express اقدام به ساخت یک دایرکتوری مجازی که همان مسیر ذخیره پروژه هست کرده. برای معرفی دایرکتوری مجازی جدید، یک کپی از تگ application را ایجاد کنید.
برای مثال من قصد دارم یک دایرکتوری مجازی به اسم media بسازم تا تصاویر و دیگر فایلهای چندرسانه ای را در آن ذخیره کنم و محل فیزیکی آن نیز D:\testvd میباشد. پس تگ کپی شده را به نحو زیر تغییر میدهم:
<application path="/media" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="d:\testvd" /> </application>
بنابراین در کل، تگ site من به شکل زیر تغییر پیدا میکند:
<site name="Oscar_Manager" id="23"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="E:\website\oscar\panel\Oscar_Manager\Oscar_Manager" /> </application> <application path="/media" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="d:\testvd" /> </application> <bindings> <binding protocol="http" bindingInformation="*:1844:localhost" /> </bindings> </site>
الان مسیر مجازی ما ساخته شده است. برای تست صحت این کار، یک فایل تصویری را در آن قرار میدهم و در کنترلر مورد نظر، این کد را مینویسم تا یک تصویر به سمت کلاینت در یک virtual directory ارسال شود.
var dir = Server.MapPath("~/media"); var path = System.IO.Path.Combine(dir, "1.jpg"); return base.File(path, "image/jpeg");
کنترلر را صدا زده تا نتیجه کار را ببنید.
همانطور که حتما متوجه شدید IIS Express محیط GUI ندارد. البته مدتی است افزونهای برای این کار محیا شده ولی بیشتر کاربرد آن ایجاد یک سایت جدید و اجرا و توقف IIS میباشد که میتوانید آن را از اینجا دریافت نمایید.
نکته:البته بنده این نکته را تایید نمیکنم ولی شنیدهام که در نسخههای بالاتر ویژوال استادیو با راست کلیک بر روی نام پروژه، گزینه Use IIS Express وجود دارد که به یک محیط گرافیکی ختم میشود و از آنجا که بنده نسخه 2012 را دارم این مورد را تست نکردم.
ایجاد virtual Directory از طریق Appcmd
دسترسی به appcmd از طریق مسیر زیر امکان پذیر است:
%systemroot%\system32\inetsrv\AppCmd.exe
این دستور به تمامی اشیاء سرور، از قبیل سایتها و اپلیکیشنها دسترسی دارد و میتواند هر نوع متدی را بر روی اشیاء سرور، از قبیل ثبت، ویرایش و حذف را انجام دهد.
یکی از این دستورات، برای ساخت Virtual Directory استفاده میشود:
APPCMD add vdir /app.name:"default we site/" /path:/vdir1 /physicalPath:d:\testvd
سوییچ /app برای نام وب سایت یا پروژه است و حتما در انتهای نام، علامت / قرار گیرد. سوییچ بعدی هم که /path هست برای دادن مسیر مجازی و سوییچ آخری هم آدرس محل فزیکی است. بعد از اجرای دستور، پیام زیر نمایش داده میشود:
VDIR object "Default Web Site/vdir1" added
پنجره commandprompt باید به صورت Run a Administrator باز شده باشد.
برای تغییر محل فیزیکی یک virtual directory میتوان از دستور زیر استفاده کرد:
appcmd.exe set vdir "Default Web Site/vdir1/" -physicalPath:"D:\Files"
از این پس مسیر فیزیکی این آدرس مجازی مسیر D:\Files خواهد بود.
البته مباحث پیشرفتهتری چون application poolها نیز وجود دارد که از حوصله این مقاله خارج هست و در وقت و مقاله دیگر بررسی خواهیم کرد.
برای ارسال دستور به IIS Express هم از طریق مسیر زیر appcmd را باز کنید:
%ProgramFiles%\IIS Express\appcmd.exe
امکان ایجاد virtual directory عموما در سرورهای مجازی و اختصاصی در پنل مربوطه نیز وجود دارد.