HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Weblap képének szolgáltatása assembly-ből


Példaprogram letöltése

27823 bájt

Ha végigkövetjük egy webes kérés útját, kiderül, hogy a kérés kiszolgálását egy HTTP Handler nevű modul végzi. A .NET Framework segítségével lehetőségünk van saját modult írni, melyet tetszőleges funkcióra, többek között képek szolgáltatására is felkészíthetjük. Cikkünkben elkészítünk egy példát, mely a Web-en megjelenő képet egy assembly erőforrásából nyeri ki.

A mellékelt példa megnyitása előtt szükséges egy ImageHandler nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez futtassa le a mellékelt CreateVD.js parancsállományt. A példa használatához konfigurálni kell az IIS-t is. Ennek részleteiről az ’IIS-konfiguráció” című bekezdésben olvashat.
A mellékelt példában bemutatjuk, hogy miként jeleníthetünk meg egy képet úgy, hogy az egy assembly erőforrása. Ennek érdekében létrehozunk egy saját kezelőosztályt, mely fogadja a speciális paraméterezéssel rendelkező webes kérést, és kiszolgálja azt. A kezelő az IHttpHandler interfész metódusát és property-jét implementálja. A metódusban valósítjuk meg a kép kiolvasását, és a HTTP adatfolyamba történő kiírását. Annak érdekében, hogy a kezelőnk funkcionáljon, egy speciális kiterjesztést kell megadnunk, melyet a kérésben is szerepeltetnünk kell. Ekkor lép működésbe a saját kezelő modulunk, és szolgálja ki a kérést.
IIS-konfiguráció
A speciális kiterjesztés a .soimg lesz, melyre hivatkozunk a kérésben.
Ennek megadásához az ImageHandler virtuális mappa Tulajdonságlapján, a Virtuális könyvtár fül Konfiguráció feliratú gombjára kell kattintanunk, majd a felbukkanó panelen a Hozzáadás gombra.


A kiterjesztés megadásához ki kell töltenünk a megjelenő dialógusablakot. A Végrehajtható fájlmezőben kell megadnunk, hogy melyik DLL dolgozza fel a kérést. Ez pedig a .NET Framework ASPNET_ISAPI.dll-je, elérési útja a következő:


%winntroot%\Microsoft.NET\Framework\%version%\aspnet_isapi.dll
A művelet után bezárva az IIS konfigurációs paneljét, elkezdhetjük a kódolást. Most már hivatkozhatunk a .soimg kiterjesztésre.


Assembly elkészítése
Az IHandler projekt ImageClass osztályának RenderImage metódusa olvassa be az assembly erőforrásai között szereplő so.gif állományt, majd a WriteImage metódus segítségével küldi azt a kimeneti adatfolyamba.
using(Stream  imageStream = a.GetManifestResourceStream(image))
{
  using(Image img = Image.FromStream(imageStream))
  {
    HttpResponse  response = HttpContext.Current.Response;
    response.ContentType = "image/gif" ;
    img.Save(response.OutputStream,ImageFormat.Gif);
  }
}
Amennyiben a so.gif állomány hiányzik, vagyis nem nyerhető ki az assembly-ből, akkor a mistake.gif állományt küldi a kimentre.
WriteImage(Assembly.GetExecutingAssembly(),"IHandler.mistake.gif");
HandlerClass osztály létrehozása
A kezelő osztályát tehát az IHttpHandler interfészből származtatjuk.
public class HandlerClass :  IHttpHandler
{
...
A ProcessRequest metódust kell implementálni az osztályban, mely meghívja az ImageClass osztály statikus RenderImage metódusát.
public void ProcessRequest(HttpContext context)
{
  string assembly = context.Request.QueryString["assembly"];
  string image = context.Request.QueryString["imagename"];
  ImageClass.RenderImage(assembly,image);
}
A kérés úgy történik, hogy a kezelő megkapja az assembly és a képállomány (erőforrás) nevét egy-egy paraméterben, és ezeket adja át a metódusnak paraméterként.
A Web.config állományban is meg kell adnunk egy hivatkozást a kezelő osztályára, feltüntetve a kiterjesztést.
<httpHandlers>
  <add verb="GET" path="*.soimg" type="IHandler.HandlerClass, IHandler" />
</httpHandlers>
Web-alkalmazás létrehozása
A webes alkalmazás WebForm1.aspx lapján nincs más teendőnk, mint hogy egy Image kontrolt helyezünk el a lapon, és beállítjuk a kép forrását. Ezt a következőképpen tehetjük meg:
<asp:Image id="Image1" style="..." runat="server" ImageUrl=".soimg?assembly=IHandler&imagename=IHandler.so.gif">
</asp:Image>
Az assembly és az imagename paraméterekben adjuk meg az erőforrást tároló assembly, és az erőforrás nevét.

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 653. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |