Showing posts with label IIS. Show all posts
Showing posts with label IIS. Show all posts

2011/11/03

‫git server با استفاده از ویندوز و دات‌نت

تا همین چند وقت پیش برای ایجاد یک git server در ویندوز مجبور بودید از راه حل‌های لینوکسی مثل OpenSSH و cygwin استفاده کنید. استفاده از این طور راه حل‌ها واقعاً سخت و عذاب آور بود و گاهی اوقات باعث می‌شد شخص قید git server ویندوزی را بزند و به سراغ گزینه‌های دیگری مثل مرکوری برود. خوشبختانه جامعه کاربری git در ویندوز بیکار ننشسته و طی این مدت روش‌ها و ابزارهای جدیدی ارائه شده است:


git-dot-aspx
تعداد دانلود خوبی داشته و با چهار رقمی شدن فاصله‌ای ندارد.

bonobo git server
با استفاده از ASP.NET MVC نوشته شده است. downloadهای زیادی ندارد و حتی نقد منفی هم دارد. آن را تست کردم و فعلاً در push کردن فایل‌های حجیم (بیش از یک مگابایت) مشکل دارد.

grack
یک راه حل مبتنی بر ruby

git_http_backend.py
یک راه حل مبتنی بر پایتون

استفاده از Apache و امکانات مخصوص msysgit
به جای IIS از Apache استفاده می‌کند ولی راه حل مطمئن و امتحان شده‌ای است.

Git-Web-Access
الهام گرفته از grak و git_http_backend.py ولی نوشته شده با ASP.NET و WCF






2011/05/30

‫تولید Feed با استفاده WCF

مطمئناً برای تولید Feedهای RSS یا ATOM در ASP.NET راه‌ها و کدهای زیادی وجود دارد. اما یکی از راه‌های جالب تولید Feed در دات‌نت، استفاده از WCF است. WCF با استفاده از چند خط کد ساده برای شما Feed می‌سازد.

سرویس‌های Feed معمولاً در برنامه‌های تحت وب که در IIS اجرا می‌شوند قرار داده می‌شوند. بنابراین باید سرویس WCF را در فایل‌های ‎.svc قرار داد. اگر سرویس در یک host با دسترسی خیلی پایین مثل سایت‌های اینترنتی قرار داشته باشد نمی‌توان از کلاس ServiceHost استفاده کرد. بنابراین باز هم باید از فایل‌های ‎.svc که توسط IIS میزبانی (host) می‌شوند استفاده کرد. خوشبختانه امکانات اصلی WCF از نسخه ۳٫۵ دات‌نت در دسترس هستند و از آنجا که دات‌نت ۳٫۵ روی runtime نسخه ۲ دات‌نت هم کار می‌کند بنابراین مشکلی در سرورهای ویندوز ۲۰۰۳ و IISهای قبل از نسخه ۷ هم وجود ندارد.


جهت کسب اطلاعات بیشتر به MSDN مراجعه کنید. در صورت استفاده از IIS بایستی از webHttpBinding به عنوان binding استفاده کرد.




2010/12/12

‫داستان بی‌سوادی ما - ۶: Application Pool

یکی از مشکلات عجیب و غریب ما این بود که یکی از پروژه‌های ما مشکلات عجیبی با IIS داشت. این پروژه (الف) از پروژه‌ی دیگری (ب) مشتق شده بود. یعنی هر آن چه که در پروژه‌ی «ب» موجود بود در پروژه‌ی «الف» هم بود. پروژه‌ی «ب» هیچ مشکلی نه در ASP.NET Development Server و نه در IIS نداشت. اما پروژه‌ی «الف» در ASP.NET Development Server درست کار می‌کرد ولی در IIS نه.

این موضوع باعث اختلاف نظرهای زیادی شده بود. تا این که یک روز فهمیدم مشکل پروژه‌ی «الف» کجاست. علت، مقایسه‌ی آبجکت‌ها در حافظه بدون استفاده از ID آنها بود. این مقایسه در ASP.NET Development Server درست کار می‌کرد ولی در IIS درست کار نمی‌کرد. بعد از رفع مشکل هنوز این سوال برایم وجود داشت که چرا پروژه‌ی «ب» دچار چنین مشکلی نشده بود؟

یک روز که دنبال چیز دیگری در IIS بودم متوجه شدم که هر کدام از این پروژه‌ها از یک Application Pool مختلف برای کار خود استفاده می‌کنند. پروژه‌ی «ب» از Classic .NET AppPool استفاده می‌کرد ولی پروژه‌ی «الف» از DefaultAppPool. فرق این دو هم فقط در Pipline بود. اولی Classic بود و دومی Integrated. محض امتحان یک بار Application Pool پروژه‌ی «الف» را به Classic عوض کردم و آن مقایسه‌ای آبجکتی را دوباره به حالت بدون ID برگرداندم. در کمال ناباوری مشکل اولیه‌ی پروژه‌ی «الف» حل شد!

در واقع مشکل پروژه‌ی «الف» را می‌شد با درک بهتری از Pipeline زودتر کشف کرد که به علت بی‌سوادی و بی‌اطلاعی این موضوع اتفاق نیفتاده بود. البته الان می‌دانم علت خرابی کار Pipeline بوده ولی هنوز هم درک نمی‌کنم چرا.




2010/12/08

Web Development Server and IIS

I am using "ASP.NET Development Server" with Visual Studio 2010 Ultimate x64 on a Windows Server 2008 R2 x64 machine. Development Server is my primary development and debug my ASP.NET applications. After my work is done, the website moves to an IIS 7.5 on a Windows Server 2008 R2 x64 (same machine) with "DefaultAppPool".

I was used to think that an application's behavior is as same as in both "ASP.NET Development Server" and "IIS". Both recently realized they are not as same as I think. I found 3 situations that they behave differently:

1. Server.MapPath behaved differently between them. Path that returned from one was different from other one. More detail available here.

2. Object comparison in LINQ-to-Object queries with comparing only objects themselves is not possible in IIS, this comparison should be done with comparing object's Ids.

3. Our data access layer is implemented via Castle ActiveRecord. In an arbitrary method properties of an entity was updating without calling its .Save() method. Despite I agree this is a bug itself, the method was working properly in ASP.NET Development Server but was not working in IIS.


I'm not the only person that think ASP.NET Development Server and IIS behaves differently. Other people like this think like me.

At this moment I'm curios about How Application Pool affects IIS and what is Application Pool of ASP.NET Development Server. Additionally Pipeline mode may be a cause of many of this problems. Pipeline mode in IIS 6 and below was classic that means they was using ISAPI but in IIS 7 and above a new Pipeline has been emerged. This new Pipeline is named "Integrated" and do not use ISAPI.




2010/10/16

Confusing problem with log4net

I'm using log4net for logging in my ASP.NET application. This web site is based on .Net framework 3.5 and is installed on IIS 7.5 and Windows Server 2008 R2 in a 64 bit machine. Logging was working greatly when I was running application from Visual Studio 2010's internal web server, but was not working at all when run from IIS.

First thing that I thought about was permission. So I grant full access to network service with the folder containing application: "c:\inetpub\wwwroot\myapp". But this didn't work and no log file generated. As I'm new to Windows Server 2008, I tried to grant full permission to all users that I knew: IUSR, local service, aspnet, IIS_IUSRS, Everyone, etc. But still nothing was working. A question in SO caused me to think this is because of trust level, so I set my application's trust level to full. But still nothing was working. Another question in serverfault.com caused me to think the problem root is that Windows Server 2008 is using a new user for IIS. So I tried to use icacls to add ApplicationPoolIdentity to permission list. After it, I tried to change Identity of DefaultAppPool to Network Service. But none of this two solutions solved my problem.

Some people have been recommending to enabling internal logging of log4net to detect original problem. And yes, this showed me what was the problem:

log4net: XmlConfigurator: config file [C:\inetpub\wwwroot\log4net.config] not found. Configuration unchanged.

After some investigations, root cause was detected. It was due to incorrect use of Server.MapPath. I was forgotten to add a tilde mark in beginning of log4net.config's path. When I used Server.MapPath as follow, all headaches have suddenly disappeared and my log file appeared and get working as I was desiring:

XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/log4net.config")));
A wrong path has been causing log4net to search c:\inetpub\wwwroot for log4net.config not my application's path at c:\inetpub\wwwroot\myapp. All this nightmare was because of my own mistake not Windows, IIS or .Net!




2009/02/27

‫نصب ActivePerl و تنظیم IIS برای اجرای اسکریپت‌های پرل

۱- همه بخش‌های IIS را نصب (فعال) کنید.
۱- دریافت ActivePerl از سایت ActiveState و نصب آن در ویندوز.
۲- اسکریپت‌های پرل را در IIS به روش زیر فعال کنید.
•    در بخش Handler Mappings با استفاده از گزینه Add Script Map دو اسکریپت زیر را اضافه کنید.
•    برای Perl: 

‎*.pl Request path
c:\Perl\bin\perl.exe "%s" %s Executable
Perl Script Map Name

•    برای CGI: 

‎*.cgi Request path
c:\Perl\bin\perl.exe "%s" %s Executable
CGI Script Map Name

•    روی Handler مربوط به Perl دابل کلیک کنید.
•    دکمه Request Restrictions را کلیک کنید و از برگه Access گزینه Execute را انتخاب کرده و OK را کلیک کنید.
•    پس از تایید عملیات، Entry Type مربوطه باید به Local تغییر پیدا کرده باشد.
•    روی همان Handler مربوط به Perl راست کلیک کرده، گزینه Edit Feature Permissions… را انتخاب کرده و همه مجوزها را اعطا کنید.
۳- IIS را Restart کنید.
۴- IIS را امتحان کرده و مطمئن شوید که می‌تواند اسکریپت‌های CGI و Perl را اجرا کند. برای این کار کد زیر را در یک فایل متنی ساده با پسوند .pl ذخیره کرده و آن در یک شاخه اختصاصی در شاخه wwwroot بگذارید. سپس در IIS یک Virtual Directory جدید ساخته و مسیر فایل فوق الذکر را به آن معرفی کنید. سپس آدرس کامل آن را به انضمام نام فایل بالا در browser خود تایپ کنید. اگر همه چیز درست پیش رفته باشد باید برنامه در حال کار را ببینید در غیر این صورت تا حل مشکل به مراحل بعدی نروید. دقت کنید که اگر به جای Virtual Directory یک Application ساخته باشید هیچ چیزی کار نمی‌کند و خطا می‌گیرید.

 

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print <<HTML;
<html>
<head>
<title>A Simple Perl CGI</title>
</head>
<body>
<h1>A Simple Perl CGI</h1>
<p>Hello World</p>
</body>
HTML
exit;

 

 

 

۵- در صورتی که مشکلات IIS همچنان ادامه داشت از web.config نمونه زیر کمک بگیرید. IIS از نسخه ۷ و بعد از آن به ازای هر Virtual Directory یک web.config ایجاد می‌کند که همه تنظیمات را در آن نگه می‌دارد:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers accessPolicy="Read, Execute, Script">
      <remove name="CGI Script Map" />
      <remove name="Perl Script Map" />
      <add name="Perl Script Map" path="*.pl" verb="*" modules="CgiModule" scriptProcessor="c:\Perl\bin\perl.exe &quot;%s&quot; %s" resourceType="Unspecified" requireAccess="Execute" />
      <add name="CGI Script Map" path="*.cgi" verb="*" modules="CgiModule" scriptProcessor="c:\Perl\bin\perl.exe &quot;%s&quot; %s" resourceType="Unspecified" requireAccess="Execute" />
    </handlers>
    <staticContent>
      <mimeMap fileExtension=".pl" mimeType="text/html" />
      <mimeMap fileExtension=".cgi" mimeType="text/html" />
    </staticContent>
  </system.webServer>
</configuration>


۶- ممکن است دو لینک زیر برای رفع مشکلات مربوط به نصب پرل روی IIS کمک کند:
•   http://perl.about.com/od/perltutorials/a/hellocgi.htm
•     http://community.activestate.com/forum-topic/configuring-perl-on-iis-7

 

-------------------------------------------------------------------------------

این متن در چهار بخش تقدیم می‌گردد که لینک هر چهار بخش آن در جدول زیر آمده است. یک نسخه کامل از هر چهار بخش آن هم به صورت pdf موجود است که از طریق ایمیل بنده قابل دریافت است.

بخش اول:معرفی OTRS
بخش دوم: نصب ActivePerl و تنظیم IIS برای اجرای اسکریپت‌های پرل
بخش سوم: ایجاد دیتابیس و تنظیمات ODBC برای اجرای OTRS
بخش چهارم: نصب سورس OTRS و تنظیمات مربوطه




2008/05/31

‫چطور توانستم يک نسخه کاملا fresh از IIS نصب کنم؟

براي چندين و چند بار IIS را پاک کرده و مجددا install کردم که بي‌فايده بود. تنها راه اين است که هم IIS و هم Internet Explorer را از ويندوز پاک کرده و بعد از آن فايل متابيس IIS را و هر نوع فايل ديگر مرتبط با آن را از مسير C:\WINDOWS\system32\inetsrv پاک کرده و مجددا نسبت به نصب آن اقدام گردد. البته با انجام اين کار metabse error گرفته و مجبور هستيد يک بار ديگر aspnet را با کمک دستور aspnet_regiis -i نصب کنيد.




2008/05/28

IIS Server Error & IIS Server Application Error

من يک ويندوز ايکس پي، IIS 5.1، .net Framework 2.0 و يک برنامه تحت وب دارم که آن را به صورت يک Virtual Directory در IIS نصب کرده‌ام. اما بعد از مدتي به طور ناگهاني خطاي HTTP 500, Server Error مي‌گيرم. براي رفع اين مشکل مراحل زير را دنبال کردم:
1- نحوه بروز خطا: با وارد کردن آدرس برنامه در IE خطاي HTTP 500, Server Error را دريافت مي‌کنم.
2- تيک Show friendly HTTP error messages را از تب Advanced گزينه Internet Options مرورگرم بر مي‌دارم تا اصل خطاي اتفاق افتاده را به من نمايش دهد.
3- پيغام خطاي واقعي Server Application Error است.
4- با مراجعه به Event Viewer (قسمت System) يک هشدار مربوط به W3SVC (با EventId برابر با 36) و يک Error مربوط به DCOM (با EventId برابر 1004) مي‌بينم. پيغام خطاي Error به مشکلي در رابطه با logon کاربر IWAM_computer اشاره دارد.
5- براي حل موقت اين مشکل Application Protection مربوط به برنامه تحت وب را در IIS روي Low (IIS Process) تنظيم کنيد.
6- براي حل دائم از طريق command prompt به مسير C:\inetpub\AdminScipts رفته و دستور cscipt synciwam.vbs را اجرا کنيد تا مشکلات مربوط به کاربر IWAM_computer را حل کند.
7- اگر IIS شما خطاي Metabase Error بدهد دستور aspnet_regiis -i را که .net framework 2.0 را دوباره نصب مي‌کند، اجرا کنيد.
8- حالا مي‌توانيد از برنامه خود دوباره استفاده کنيد.

لينک‌هاي مرتبط براي حل اين مسئله:
http://support.microsoft.com/kb/309051
http://support.microsoft.com/default.aspx?scid=kb;en-us;321448
http://msdn.microsoft.com/en-us/library/ms525006(VS.85).aspx
http://groups.google.com/group/microsoft.public.inetserver.iis/browse_thread/thread/696fb0fb28b64754/9a057950d95c47ec?hl=en&lnk=st&q=DCOM+error+Logon+failure%3A+unknown+user+name+or+bad+password+and+was+unable+to+logon#9a057950d95c47ec