IIS a HttpModul pro rewriting   otázka

ASP.NET WebForms

Zdravim,

jako administrator v jedne organizaci se snazim rozjet jednu webovou aplikaci(celkem rozsahly projekt). Neprogramoval jsem to ja, v ASP.NET teprve zacinam..

mam na starosti to ted v prvni rade rozjet u nas na serveru, ktery jsme kvuli teto aplikaci kupovali.. abychom nemuseli platit za hosting.. server:WinSVR2008R2 takze tam je IIS7 jeslti se nepletu.

A k problemu veci:

Je zde delany vlasni http modul(abstraktni trida) pro rewriting.. cili je tam nejaky BaseModuleRewriter implementujici rozhrani IHttpModule.

pak je trida ktera dedi z BaseModuleRewriter a zde je cela logika prepisovani..

we web.configu mam naimportovany modul tak jak se ma pro iis7 importovat a aji tak jak se ma pro iis6 importovat..

kdyz ale projekt vypublikuji na server a dojdu na stranky, tak se me vse nacte vpohode, jakmile ale kliknu na nejaky odkaz, ktery je prave napriklad /veci tak dostanu error od serveru 404 - File or directory not found.

kdyz projekt spustim z VS a debuguji to.. tak vse funguje.. na IIS ale ne :( Prosba tedy zni: jak donutit iis aby requesty na cokoliv nacpal do tohoto zmineneho modulu, a ne aby hlasil ze slozka nebo soubor neexistuje? Je nejaka moznost?

Dekuji za jakekoliv popostouchnuti.. jsem z toho uz celkem zoufaly..

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Pošlete sem kus toho configu, kde ty moduly registrujete. Musí tam být dvakrát, jednom v system.web a podruhé v system.webserver kvůli novému API IIS7.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

presne to jsem si vycetl, takze to registruji takhle:

v

<system.web>

<httpModules>

<add type="MapShake.Web.UrlRewriter.ModuleRewriter" name="ModuleRewriter"/>

</httpModules>

<system.web>

a v

<system.webServer>

<modules>

<add name="ModuleRewriterMaphshake" type="MapShake.Web.UrlRewriter.ModuleRewriter"/>

</modules>

</system.webServer>

jmeno muze byt jakekoliv?

Problem je, ze musim asi nekde nastavit v iis aby reagovalo na vsechny pozadavky, ale zatim se zda.. ze IIS to hleda jako soubor a ten samozrejme nenajde..

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zkuste dát za typ MapShake.Web.UrlRewriter.ModuleRewriter čárku a název assembly, v níž ten modul je.

Máte ho v nějaké externí knihovně, nebo je jeho třída ve složce App_Code?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Koukam na to a je tam v te webove aplikaci pridana reference na projekt ktery je v jedne solution spolecne s webovou aplikaci...

Projekt je pojmenovany MapShake.Facades , v nem je slozka web a vnem soubor UrlRewriter.cs .. vykopirovana cesta z VS vypada po kliknuti pravym tlaacitkem na soubor zhruba takhle cestaNaMistnimDisku\MapShake\MapShake\MapShake.Facades\Web\UrlRewriter.cs

aby toho nebylo malo tak trida je pojmenovana jinak jak soubor a je definovana takhle:

public class ModuleRewriter : BaseModuleRewriter

asembly name je tedy nejspis tato: MapShake.Facades ????

po zavedeni se nic nezmenilo. zkusil jsem udelat schvalne v nazvu assembly chybu, a to na me iis pri reloadu stranky nahlasil samozrejme chybu.. takze vypada ze modul je pridany spravne..

na strane serveru vidim rozsahlejsi info o chybe.. viz:

HTTP Error 404.0 - Not Found

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable. Detailed Error Information

Module IIS Web Core

Notification MapRequestHandler

Handler StaticFile

Error Code 0x80070002

Requested URL http://mapshake.mendelu.cz:80/492-Rastro...

Physical Path C:\VAR\WWW\MapShake\492-Rastrove-uzemni-plany-Jihomoravskeho-kraje

Logon Method Anonymous

Logon User Anonymous

Most likely causes:

•The directory or file specified does not exist on the Web server.

•The URL contains a typographical error.

•A custom filter or module, such as URLScan, restricts access to the file.

Things you can try:

•Create the content on the Web server.

•Review the browser URL.

•Create a tracing rule to track failed requests for this HTTP status code and see which module is calling SetStatus. For more information about creating a tracing rule for failed requests, click here.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Mrkněte na IIS v příslušném webu do sekce Modules, jestli tam modul opravdu je.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Modul tam je videt..

zkousim to i na IIS 6 na win xp lokalne na notebooku..

na IIS6 to totiz bezi na aktualnim hostingu..

bohuzel ani po vypublikovani do lokalniho IIS 6 se chova server stejne jako verze 7 a hlasi error 404 - soubor nebyl nalezen

je opravdu divne ze pokud projekt tak se spusti na ASP.NET development serveru a tam vse funguje v poradku..

kdyz jsem hledal ruzne nastaveni v IIS 7 tak zde dou nastavit handlery na napriklad * tedy cokoliv.. neni treba tam neco nastavit?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

A není chyba v tom redirectovacím modulu?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

V mailu mate ty dve tridy vykopirovane z projektu.. Bohuzel jsem to poslil na vicekrat.. protoze ze zahadneho duvodu se nepodarilo poslat v textu pres webove rozhrani gmailu.. bude to az ve 3 mailu s prilohou txt souboru..

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Na první pohled to vypadá dobře, nemám čas to podrobněji zkoumat.

Spusťte Visual Studio s admin právy a nasaďte aplikaci na lokální IISku. Ve VS dejte Open Web Site a otevřete ji z Local IIS, ať můžete debugovat přímo na IISce, kde to zlobí.

Dejte breakpoint na nějaké vhodné místo do toho modulu a spusťte to. Načtěte stránku a uvidíme, zda-li se modul vůbec spouští.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ok.. napisu jak jsem dopadl.. Opravdu vam moc dekuji a omlouvam se za zdrzovani.. vim ze casu neni nikdy dost, a ja vam ho jeste takhle beru..

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Od toho tu ta diskuse je. Omlouvat se nemusíte.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

No, tak bohuzel to asi sam nesvedu, zjistil jsem, ze kdyz web jen vypublikuji, tak tam nevidim soubory aspx.cs s kodem, ale jen samotne aspx soubory.. tak jsem vykopiroval webovou aplikaci na server i se soubory cs.. pak ji z vs z iis otevrel.

brakpoint ale nevim kam dat.. dosud jsem delal jen win form aplikace, kde bylo naprosto jasne kam dat breakpointy.

tady se obsah html stranky generuje, a ztoho jsem celkem zmateny.. nevim jak si treba odchytit udalost click z nejakeho odkazu, ktery se v kodu nekde generuje..

Navic ve vyslednem webu nejsou soubry z ostatnich projektu, ktere byly v solution..

kdyz jsem spoustel debug primo ze solution ve VS tak jsem si brakpointy mohl dat primo do te tridy ModuleRewriter a videl jsem, jak pokazde to tudy prochazi..

ve vypublikovanem webu jsou jen dll soubory v adresari bin.. tedy napriklad MapShake.Facades.dll, v kterem by mela byt trida starajici se o rewriting. Do nich se ale bohuzel nedostanu abych si sem mohl nahazet brakpointy.. a jelikoz by aplikace timto kodem mela prochazet po zahajeni requestu, netusim kam bych mel dat breakpoint abych se dostal pri ladeni do dll souboru, jestli to vubec jde...

nejaky napad jak me nakopnout dale prosim?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Vypublikovávat tu website nemusíte - normálně jen IISku nasměrujte na adresář, kde tu aplikaci máte, který normálně otevíráte ve VS. Pak dejte breakpoint do toho modulu a uvidíte, jestli se zavolá nebo ne.

Jinak nastudujte základy ASP.NET a HTTP protokolu, klikání na odkazy (HyperLink nebo <a ...>) nevyvolává žádné události. To jen komponenty LinkButton, Button atd.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jde o to, ze webova aplikace je v jednom projektu, modul pro rewrite je v jinem projektu..

tech projektu je v solution vice..

Takze kdyz prehraju webovou aplikaci do iis nebo klidne nastavim iis aby odkazovalo do te webove aplikace, tak jelikoz je modul pro url rewrite v jinem projektu, ve vysledku to webova aplikace ma pridane jako referenci na projekt a pri buildu aplikace se z ostatnich projektu vytvori dll soubry ve slozce bin s kterymy ta web. aplikace pracuje..

takze kdyz se pripojim na iis pres VS tak nevidim jiz sobur s modulem.. maximalne dll soubor projektu v kterem to bylo naprogramovano.. :(

na disku mam tedy soubor .sln

v nem je asi 7 slozek s 6ti projektama z toho jeden projekt je WebUI a v tom je webova aplikace..

takze do modulu breakPoint nemohu dat, jelikoz ve webove aplikaci neni.. jen v dllku do ktereho se nedostanu

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Otevřete tu website z IIS ve Visual Studiu, klikněte pravým tlačítkem na solution v Solution Exploreru a dejte Add Existing Project. Vyberte projekt modulu a přidá se vám do solution. Pak ze složky Bin website smažte tu DLLku, dejte na website Add Reference a na záložce Project vyberte ten projekt s tím modulem.

Pak můžete pustit debugging a breakpoint v modulu by se měl chytit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No prvni problem byl, ze kdyz jsem otevrel web site z iis, tak se otevrela jen ta, a zadne solution jsem nevidel.. trochu jsem to obesel.. a to tak, ze jsem do slozky udelal virtualni adresar, do nej teprv dal tu aplikaci a otevrel jsem ve VS nadrazeny adresar..

pak jsem videl virtualni adresar s projektem, klikl na ni pravym tlacitkem a Open web site.. pak se VS zeptalo jestli chci otevrit jako novy projekt nebo pridat do solution..

pak jsem udelal vse jak jste rikal, no a pri startu jakekoliv stranky to modulem opravdu prochazi, ale jakmile kliknu na odkaz, ktery je napr http://mujweb/virtualniAdresar/344-mapaPokusna, tedy s tou peknou adresou o kterou by se mel postarat modul, kde neni zadna pripona aspx, soubor tedy neexistuje, obdrzim od IIS chybu 404 Object Not Found. A VS samozrejme nic neodchyti..

No asi bude fakt neco potreba nastavit v IIS aby vsechny requesty smeroval nekam, kde to modul bude schopny odchytit..

Dneska bude mit kolega schuzku s clovekem co aplikaci delal.. tak snad nam k tomu doda potrebne informace jak to na IIS rozjet..

jeste oprava verze IIS .. na win xp mam IIS verze 5 na zacatku jsem uvadel myslim 6

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To nastavení toho modulu vypadalo správně z ukázky, co jste posílal. Ale záleží, jak je nastavená IISka a jestli to má povolené. Kdyžtak dejte vědět, čím to bylo, nebo se na to ještě podíváme, pokud to na zítřejší schůzce nevyřešíte.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback