A WebMethod attribútummal ellátott metódusok meghívhatóvá válnak a kiválasztott TCP porton, HTTP kommunikációt használva. Kézenfekvő az igény, hogy a SaaS szolgáltatások ne csak primitív és összetett adatokat hanem HTML tartalmat is ki tudjanak szolgálni.
Az URL alapú szolgáltatás kezelés lehetővé teszi, hogy böngészőben használjuk a WebMethod-okat, ha azok HTML tartalmat is elő tudnának állítani. A WebMethod, amely string típusú adatot ad vissza, alapértelmezetten TEXT/PLAIN mime típussal kerül visszaküldésre. Ennek megoldására vezettük be a HtmlResponse osztályt. Az osztály segítségével tetszőleges mime típus visszadható és az alapértelmezett string adatok küldése helyett lehetőség van byte[] eredmény visszaadására is. Ez használható képek vagy letölthető tartalom kiszolgálására. Pl.: http://localhost:8800/?pluginicon=true (amennyiben a plugin-nek van ikonja)
Egy teljes Intranet portál megvalósíthatóvá válik a HtmlResponse eredmény típus használatával. Nézzük erre néhány példát:
HTML tartalom létrehozása
A HTML tartlom létrehozása a programozó vagy a designer feladata. A HTML stípusok, DIV-ek, TABLE-k kezeléséhez a SyX SDK nem nyújt támogatást. A létrehozott HTML tartalom megfelelő megjelenítéséhez használható a HtmlResponse osztály.
Nézzük az alábbi példát, ahol egy StringBuilderben összeállított HTML tartalmat szolgálunk ki a böngésző felé. (SaaS módban valószínüleg a hívó fél nem tud mit kezdeni a HTML formázott szöveggel)
[WebMethod("Példa web metódus V.")]
public HtmlResponse SampleWebMethodHTML()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(“<html>”);
sb.AppendLine(“<body>”);
sb.AppendLine(“<center>Példa szöveg”);
sb.AppendLine(“<img src=’http://www.symboltech.hu/images/slide_easy.jpg’></center>”);
sb.AppendLine(“</body>”);
sb.AppendLine(“</html>”);
return new HtmlResponse(sb.ToString());
}
A HtmlResponse alapértelmezetten Text/HTML MIME típusú adatot ad vissza UTF8 kódolással, az átadott HTML formátumú szövegen túl, semmilyen paraméter nem szükséges.
Képek, dokumentumok kiszolgálása
Képek vagy dokumentumok kiszolgálhatóak a HtmlResponse osztály konstruktorának byte[]-bel való meghívásával. Az eredmény típusának megadása fontos, mert a böngésző a MIME típus alapján fogja kiválasztani a megjelenítés vagy letöltés módját.
Készítsünk egy képet futási időben, írjunk rá egy szöveget és adjuk vissza a böngészőnek JPEG formátumban:
[WebMethod("Kép létrehozása")]
public HtmlResponse SampleWebMethodImage()
{
using (Bitmap bmp = new Bitmap(320, 160))
using (Graphics g = Graphics.FromImage(bmp))
using (MemoryStream stream = new MemoryStream())
{
g.Clear(Color.Gray);
g.DrawString(“Példa kép”, new Font(“Arial”, 28), new SolidBrush(Color.Orange), 20, 20);
bmp.Save(stream, ImageFormat.Jpeg);
stream.Position = 0;
return new HtmlResponse(stream.ToArray(), null, System.Net.Mime.MediaTypeNames.Image.Jpeg);
}
}
Állítsunk elő egy letölthető dokumentumot (lehetne az adatbázis csatolt dokumentumai közül is kiválasztani egyet):
[WebMethod("Dokumentum letöltése")]
public HtmlResponse SampleWebMethodDocument()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(“Első sor”);
sb.AppendLine(“Második sor”);
sb.AppendLine(“3. sor”);
return new HtmlResponse(sb.ToString(), “sample.txt”, MediaTypeNames.Application.Octet);
}
Vegyük észre, hogy az előző példában szereplő kép létrehozás is letöltésre kínálja fel a képet, ha a NULL érték helyett megadunk egy fájlnevet!
Átirányítás kezelése
Intranet portálok esetén előfrodulhat, hogy a HTML tartlom helyett valamely más (belső) oldalra kell átirányítani a böngészőt. Ezt szintén a HtmlResponse eredmény használatával érhetjük el:
[WebMethod("Példa web metódus REDIRECT")]
public HtmlResponse SampleWebMethodRedirect()
{
return HtmlResponse.Redirect(“/SampleWebMethodHTML”);
}
Alapértelmezett főoldal beállítása
Nyilvánvaló az igény, hogy ha Intranet portált üzemeltetünk, akkor egy főoldalon ne az elérhető szolgáltatások listája jelenjen meg, hanem a fő szolgáltatás. Ezt megadhatjuk a SyX WebStartPage attribútumával. Ennek paramétere a főoldal lekérésekor (http://localhost:8800) megjelenő szolgáltatás, amelynek tipikusan metódus nélkülinek és HtmlResponse visszatérésű értékünek kell lennie.
[WebStartPage("SampleWebMethod2a")]
404-es hibaoldal beállítása
A nem elérhető, rosszul címzett oldalak helyett lehetőség van (az alapértelmezett főoldalhoz hasonlóan) egy hibaoldalt megadni. A hibaoldal lehet egy erre a célra létrehozott oldal vagy egy létező, működést megvalósító oldal, például a főoldal. A 404-es hibaoldal minden esetben átirányítással valósul meg. Az erőforrások, képek hibás URL-jei nem kerülnek átirányításra, ilyen esetben HTTP 404-es hibát kapunk (kép helyett piros X jelenik meg a böngészőben).
[Web404Page("SampleWebMethod4")]
A favicon.ico kezelése
A rendszer automatikusan kezeli a favicon.ico image/x-icon típsuként való kiszolgálását. A SyX beépülő iconja alapján hoz létre egy ICO formátumú képet, amelyet a kérés beérkezésekor kiszolgál.
