2. SaaS metódusok definiálása

témakör: SaaS és Intranet

Kiszolgálói metódusok létrehozásához készítsünk egy tetszőleges metódust, amelyet lássunk el a WebMethod attribútummal. A WebMethod opcionális paramétere egy szolgáltatásleíró szöveg, amely a főoldalon jelenik meg a metódus linkje alatt.

A metódusnak lehet nulla, egy vagy több paramétere és visszatérési értéke is lehet void, valamilyen primitív típus vagy tetszőleges (akár saját) osztály is.

 

Metódusok létrehozása

Az alábbi példa egy olyan metódust hoz létre, amely eredményül egy szöveget ad vissza. Ez a böngészőben meg is jelenik (akár a főképernyőn a linkra kattintva is). A metódus meghívásra kerül, ha a böngészőben az alábbi linkre kattintunk: http://localhost:8800/SampleWebMethod2a

        [WebMethod(“Példa web metódus II/a.”)]
        public string SampleWebMethod2a()
        {
            return String.Format(“A_{0}_X”, “StartPage”);
        }

A következő metódus paramétert is vár, amelyet felhasznál az eredmény létrehozakor. Meghívásakor át kell adnunk egy paramétert: http://localhost:8800/SampleWebMethod2?s=pelda

        [WebMethod(“Példa web metódus II.”)]
        public string SampleWebMethod2(string s)
        {
            return String.Format(“A_{0}_X”, s);
        }

 

Paraméterek átadása

A paraméterek átadhatóak a meghívott URL-ben is ?-lel és & jellel elválasztva, illetve nagyobb mennyiségű adat esetén (URL max. 512 karakter) POST adatok között is. Mindkét meghívási mód UTF8 kódolású karaktereket vár és ad vissza. A GET és POST módszer kiváló lehetőséget biztosít arra, hogy az URL-ek meghívása, a szolgáltatások használata ne csak böngészőből legyen elérhető, hanem tetszőleges programozási nyelven írt alkalmazásból, amely képes HTTP kommunikációra.

Gyakran változó paraméterek

Amennyiben a metódushívás egy böngésző űrlapjáról jön, nehéz előre megadni minden változót, a típusosság ilyen esetben hátrány lehet. A gyakrban változó paraméterekre két megoldás létezik. A nullozható (int?, string, class) típusok használata esetén a paramétert nem kell átadni, lehetőség van arra, hogy azt elhagyjuk a metódus hívásakor. A metódus törzsében ilyenkor a .HasValue használata erősen javasolt.

        [WebMethod(“Példa web metódus Nullable”)]
        public string SampleWebMethodNull(int a, DateTime? b, decimal? c)
        {
            return String.Format(“{0} – {1} – {2}”, a, b, c);
        }

http://localhost:8800/SampleWebMethodNull?a=17

A másik – teljes szabadságot adó – megoldás, amikor a webmethod egyetlen paraméterének típusa Dictionary<string, string>. Ilyenkor a kapott összes paramétert egy dictionary típuson keresztül lehet feldolgozni. Ez lehetővé teszi, hogy paraméterek létezésére vizsgáljunk. Ugyanezen módszer jelent megoldást arra is, ha olyan sok paraméterrel (>15) dolgozunk, amely egy erősen típusos webmethod paraméterlistáját kezelhetetlenné tenné.

        [WebMethod(“Példa web metódus – Dynamic”)]
        public string SampleWebMethodDynamic(Dictionary<String, String> parameters)
        {
            List<string> result = new List<string>();
            foreach (KeyValuePair<string, string> kv in parameters)
                result.Add(String.Format(“{0}: {1}”, kv.Key, kv.Value));
            return String.Join(“\n”, result.ToArray());
        }
Eredmény típusa

A metódusok visszatérési értéke is tetszőleges típus lehet. Ezt a rendszer string-gé konvertálja majd így adja vissza (vagy jeleníti meg a böngészőben).

Összetett típusok használata

A primitív típusok mellett tetszőleges osztályok paraméterként való átadására és eredményként való kinyerésére is lehetőség van. Az osztályok adatai XML sorosítás után kerülnek átadásra. Ez lehetővé teszi, hogy szövegként átadhatóak legyenek és tetszőleges mélységű, hirerchikus adat közvetítésére is lehetőség van. A kapcsolófelület megváltozásakor (pl.: osztály bővítése) az XML sorosítás következtében a két illeszkedő felületet nem kell egyidőben cserélni. A fogadó fél a kiszolgáló válaszában található hozzáadott adatokat figyelmen kívül hagyhatja.

Például az alábbi osztály a SyX-en belül definiáljuk, majd felhasználjuk egy SaaS szolgáltatás visszatérési értékeként:

        public class WebMethodResult
        {
            private int a = 1979;

            public int A { get { return a; } set { a = value; } }
        }

        [WebMethod(“Példa web metódus III.”)]
        public WebMethodResult SampleWebMethod3()
        {
            return new WebMethodResult();
        }

Felhívjuk a figyelmet, hogy összetett adattípusok használatakor kerüljük a rendszer belső, bonyolult adattípusait, amelyek sorosítása nagyon nagy adatmennyiséget generál. Például a Symbol Ügyvitel entitásainak vagy a .NET DataTable osztályának sorosítása több MB felesleges adatot jelenít meg az XML-ben.

 

Ajax és JSON

Amennyiben az eredmény osztály típusú, úgy lehetőség van az XML formátum helyett JSON formátumot választani. A webmethod esetén alkalmazni kell a JsonResult attribútumot. Ilyenkor a metódus visszatérési osztálya nem XML sorosítással fog a kimenetre kerülni, hanem JSON formátumban. Emellett pedig az eredmény MIME típusa Application/Json lesz. Ez a megoldás használható Ajax környezetben is összetett típusok visszaadására.

 

Metódusnév és URL kapcsolata

A meghívott URL végződése alapján, betűnagyság érzékenyen kerül kiválasztásra a megfelelő metódus. A paraméterek nem sorrend és betűnagyság érzékenyek. A metódus nevének kiválasztásakor a pontokat _ jelre cseréli a rendszer, ezáltal a fájl hivatkozások (tables.js, leftcorner.jpg) is metódusokra fordíthatóak (tables_js(), leftcorner_jpg()). Statikus fájlok esetén javasolt a WebStaticResource attribútum használata!Jelenleg a rendszer nem kezeli a túlterhelt metódusokat (egy név, több féle paraméterezés).

Hozzászólok