Örvitinn

Content-Type: text/xml isapi hrakfallasaga

Ég er búinn að eyða kjánalega miklum tímum í að reyna að fá isapi dll sem ég er að þróa og viðhalda til að skila Content-Type: text/xml. Kóperaði kóða úr öðrum innanhússverkefnum, fann sýnidæmi á netinu og gekk jafnvel svo langt að hugsa eitthvað sjálfur! Sama hvað ég reyndi, ServerSupportFunction með HSE_REQ_SEND_RESPONSE_HEADER eða HSE_REQ_SEND_RESPONSE_HEADER_EX átti að vera málið, ég virtistvera að nota þetta rétt, þetta virkar í öðrum kerfum hjá okkur en ekki í þessu tilviki.

Þegar eitthvað er sótt af vefþjóni fylgir með ákveðinn haus sem ekki sést í browsernum. Í hausnum kemur yfirleitt fram hverrar tegundar serverinn er, t.d. Server: Microsoft-IIS/6.0, hve mikið af gögnum er verið að senda Content-length og þess háttar. Eitt af því sem fram kemur í hausnum er hverslags gögn verið er að senda. Þegar html er sótt af vefþjóni er því í hausunum svona lína: Content-Type: text/html. Í python getur maður t.d. gert
print urllib.urlopen("http://www.orvitinn.com/index.html").headers sem skilar:

Date: Mon, 11 Oct 2004 16:40:37 GMT
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Content-Type: text/html
X-Cache: MISS from proxy.lais.is
Proxy-Connection: close

En print urllib.urlopen("http://www.orvitinn.com/index.xml").headers skilar:

Date: Mon, 11 Oct 2004 16:50:43 GMT
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Last-Modified: Mon, 11 Oct 2004 16:49:30 GMT
ETag: "2afb4-1a66-416ab99a"
Accept-Ranges: bytes
Content-Length: 6758
Content-Type: text/xml
X-Cache: MISS from proxy.lais.is
Proxy-Connection: close

Vefþjónar eiga auðvelt með þetta og setja viðeigandi gildi einfaldlega útfrá tegund skrár sem beðið er um, hvort sem það er .htm, .html, .xml eða .jpg skrá setur vefþjónninn viðeigandi Content-Type í haus svarsins á undan gögnunum. Browserar og önnur tól skoða svo þennan haus og ákveða hvað þau eiga að gera við innihaldið.

Þegar maður er að skrifa eitthvað dýnamísk, hvort sem það er t.d. .cgi, .asp, eða isapi dll hefur vefþjónninn ekki hugmynd um hverrar tegundar gögnin eru og því þarf að segja honum það. Yfirleitt er þetta eitthvað sauðeinfalt en isapi forritun í C++ er náttúrulega aldrei mjög einföld, jafnvel þó maður noti MFC wrappera (nú fór hrollur um einhverja, en það er önnur umræða). Þetta mál hefði t.d. verið afar einfalt að leysa með Python.

Áðan leysti ég málið með því að opna Internet Information Services Manager hægrismella á dll-inn, velja properties, HTTP Headers, Custom HTTP headers og Add, skráði Content-Type í eitt edit box og text/xml í hitt. Þetta virkar vegna þess að ég skila alltaf XML gögnum úr þessum isapi dll.

Hver er mórall sögunnar? Áður en maður byrjar að eyða tíma í að forrita einhverja lausn er ágætt að athuga hvort til sé önnur betri og einfaldari leið :-)

Rosalega held ég að ég væri fljótur að fæla í burt mína fáu lesendur með því að fjölga svona færslum. :-P

forritun