IIS7, RewritePath ve IIS günlük dosyaları

oy
10

ASP.NET'te IIS7 üzerinde çalışan 3.5 uygulamasını Context.RewritePath () kullanıyorum.

Başvuru BeginRequest olay yapıyorum ve her şey dosyasını çalışır.

/ Spor talepleri doğru benzeri? Default.aspx id = 1 yeniden yazıldı ve edilmektedir.

sorun benim IIS günlüğüne ben / spor /Default.aspx?id=1 taleplerini değil, GET bkz olmasıdır.

Bu kod tür IIS6 altında mükemmel çalıştı.

Microsoft Rewrite modülünü kullanarak nedeniyle henüz hayata geçirilmemiş bazı iş mantığına, bir seçenek değildir.

Teşekkürler.

DÜZENLE:

Benim işleyicisi boru hattı çok erken görünüyor ama çalışmıyor bütün yeniden yazma şey daha, daha sonraki bir olaya mantık taşırsanız (çok geç, StaticFileHandler talebimi alır).

Ben hiç kimse bu sorunu var inanamıyorum, etrafında istedi googled google'dan?

DÜZENLE:

Olmadı! İşte IIS forumunda bulunan budur:

Entegre modu, IIS ve asp.net payında bir ortak boru hattı ve RewritePath şimdi IIS tarafından görülür çünkü IIS6, hatta IIS tarafından görülmemiştir ederken, Bu, - eğer gibi davranır klasik modunu kullanarak bu geçici bir çözüm bulabilirler IIS6.

Nihai güncelleme : bakmak Lütfen aşağıda Cevabıma , ben üretim ortamında daha bir yıl sonra sonuçları ile güncelledik.

Oluştur 09/12/2008 saat 18:15
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
6

Bazı araştırma sonra nihayet soruna bir çözüm buldum.

Ben Context.RewritePath çağrıları (ASP.NET 3.5 tanıtılan) yeni ile () yöntemi yerini almıştır Context.Server.TransferRequest () yöntemiyle.

Şimdi bariz görünüyor, ama değil olay Kıdemli Dev Mühendisi bunun IIS Çekirdek ekip düşünce üzerinde.

Ben ..., oturumda, kimlik doğrulama geri gönderme, sorgu dizesi için sayılar yaptıkları testler hiçbiri buldum.

Tommorow Ben çok yüksekliği trafik sitesine değişiklik dağıtmak edeceğiz ve yakında aslında nasıl çalıştığını anlarsınız. :)

Geri güncelleme ile olacak.

Güncelleme: çözüm benim üretim sunucularında tamamen hareketsiz değil ama test ediyor ve çalışır ve bildiğim kadarıyla şimdiye kadar söyleyebilirim, benim soruna bir çözüm. Ben üretimde başka bir şey bulursanız, ben bir güncelleme yayınlayacağız.

Nihai güncelleme: Ben bir yıldan fazla üretimde bu çözümü var ve herhangi bir sorun olmadan iyi ve istikrarlı bir çözüm olduğu kanıtlanmıştır.

Cevap 23/02/2009 saat 21:15
kaynak kullanıcı

oy
4

Sen isteği işlendikten sonra orijinal değerine geri yolunu ayarlamak ancak IIS günlük modülü önce günlük girdisi yazıyor olabilir.

Örneğin, bu modül üzerindeki yolunu yeniden yazar BeginRequestve ardından orijinal değerine geri ayarlar EndRequest. Bu modül kullanıldığında orijinal yolu IIS günlük dosyasında görüntülenir:

public class RewriteModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += OnBeginRequest;
        context.EndRequest += OnEndRequest;
    }

    static void OnBeginRequest(object sender, EventArgs e)
    {
        var app = (HttpApplication)sender;
        app.Context.Items["OriginalPath"] = app.Context.Request.Path;
        app.Context.RewritePath("Default.aspx?id=1");
    }

    static void OnEndRequest(object sender, EventArgs e)
    {
        var app = (HttpApplication)sender;
        var originalPath = app.Context.Items["OriginalPath"] as string;
        if (originalPath != null)
        {
            app.Context.RewritePath(originalPath);
        }
    }

    public void Dispose()
    {

    }
}
Cevap 17/02/2009 saat 19:14
kaynak kullanıcı

oy
2

Ben tam olarak aynı sorunu yaşadım. Bu çevrede bir yolu Server.Transfer yerine Context.RewritePath kullanmaktır. Orijinal URL yine kaydedilir böylece Server.Transfer sayfanın tamamını yaşam döngüsünü yeniden başlatmaz. QueryString ve Form koleksiyonları 2 sayfanın kullanabildiği böylece "preserveForm" parametresi için "doğru" geçtiğine emin olun.

Cevap 17/02/2009 saat 19:34
kaynak kullanıcı

oy
0

Eski bir soru, ama şu yaptığımız zaman senin sorunla karşılaşırsanız vermedi bulundu:

a) web.config'de bir yeniden yazma kuralı, örneğin /Default.aspx tüm talepleri yönlendirmek:

    <rule name="all" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*"/>
      <action type="Rewrite" url="/default.aspx"/>
    </rule>

b) içinde RewritePath denilen Page_PreInit(istek geçirilen ne şekilde URL'yi ve sorgu dizesi yeniden yazmak için, default.aspx durumunda yani. yok yere).

Örneğin, (yok) "/ somepage / x = y" talep edebilir.

a) Web.config kural /Default.aspx için eşler

b) arka "/ somepage / x = y" için yeniden yazar Page_PreInit.

Bunun sonucu, IIS 7 (Express ve üretim) içinde sunucusu günlük sorgu için "x = y" stub için "/ somepage" yansıtan ve bu, ve tüm istek nesne özellikleri (istenen (varolmayan) bir URL yansıtmak hangi istediğim budur).

Sadece garip etkisi IIS Express, günlük öğesi iki kez yazılır edilir. Ancak bu üretim (Windows Server 2008 R2) olmaz.

Cevap 06/01/2013 saat 10:54
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more