HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

SOAP fejléc használata Web szervizekben


Példaprogram letöltése

17337 bájt

Az Internetes kommunikáció új, ám rohamosan terjedő szabványa a SOAP, melynek segítségével a kliens-alkalmazás XML-el leírható formátumú üzenetekben kommunikálhat a szerverrel. A protokoll segítségével speciális formátumú üzenetcsomagokkal (SOAP Messages) kommunikálnak az alkalmazások egymással. Cikkünkben elkészítünk egy példaprogramot, melyben a kliens-alkalmazás egy ilyen üzenetben ad át információkat a Web szerviz alkalmazásnak.

Mellékelt példa megnyitása előtt szükséges egy SoapHeaderUsage nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A szerviz alkalmazás futtatása előtt gondoskodnunk kell arról, hogy a Web szerver virtuális mappájában engedélyezzük a névtelen hozzáférést.
SOAP üzenet
A .NET osztálykönyvtára számtalan megoldást kínál arra, hogy alkalmazásaink valamilyen szoftvercsatornán kommunikáljanak egymással. Napjaink igazán rugalmas, XML-alapú kommunikációs megoldása a SOAP szabvány kínálta lehetőség, mely biztonságos is egyben. Az üzenetek könnyen felépíthetőek, feldolgozhatóak.
Az üzenet tartalma, és formai megkötései tehát XML-formátumban jutnak el a szerverhez, leggyakrabban egy Web szerviz alkalmazáshoz, majd onnan a válasz is ebben a formátumban érkezik vissza.
A SOAP üzenet legfontosabb elemei a következők:
  • <envelope> elem: az üzenet tartalmát fogja közre.
  • <body> elem: az üzenetnek ezt kötelezően tartalmaznia kell, az üzenet magját hordozza.
  • <header> elem: opcionálisan megadandó tag, mely az üzenet fejrészét tartalmazza.
Web szerviz elkészítése
A mellékelt példában elkészítünk egy Web szervizt, melynek metódusát a SOAP fejlécben megadott információk ellenőrzése után hívjuk meg egy kliens-alkalmazásból. A kérés egy SOAP üzenetben jut el a szervizig, azonban az üzenetet nem mi magunk állítjuk össze, csupán létrehozzuk az azt megvalósító osztályt.
A megoldás lényege, hogy a Web szerviz alkalmazás kódjában létrehozunk egy SOAP fejléc (SoapHeader) osztályból származó osztályt, majd a kliens-alkalmazásban az ebből példányosított objektumnak állítjuk be a megfelelő értékekkel a property-jeit, majd ezt küldjük el a szerviznek.
A kliensben akkor hívhatjuk meg a szervizünk metódusát, ha a szerviz a megfelelő adatokat találja a fejlécben. Ellenkező esetben hibaüzenet keletkezik, a feldolgozást pedig megtagadja.
A .NET Framework ehhez kapcsolódó szolgáltatásainak eléréséhez meg kell adnunk referenciaként a System.Web.Services névteret. Ehhez válasszuk a Project - Add reference menüpontot, majd a megjelenő ablakban a .NET lapon keressük elő a System.Web.Services elemet.
A forráskódot tartalmazó állományok elején meg kell adnunk, hogy a névtér osztályai közül melyekre van szükségünk.
using System.Web.Services;
using System.Web.Services.Protocols;
A SOAP fejléchez létrehozunk egy osztályt, mely a SoapHeader osztály gyermeke:
public class SHeader : SoapHeader
{
  ...
  public string UserName;
  public string Password;
  public string EmpID;
}
Az osztály három nyilvános tagváltozóval rendelkezik. A UserName és Password tagok az azonosításhoz szükséges felhasználónevet (user) és jelszót (pwd) tartalmazzák majd, az EmpID tag pedig az adathalmazból visszaadandó rekord azonosítóját.
A szerviz osztályában kell egy objektumot létrehoznunk a fejléc osztályából:
public SHeader headerObject;
A kliens kérése egy SOAP üzenet lesz, mely a csatornán a következő szerkezettel mozog:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
A fejléc a három tagváltozóval:
  <soap:Header>
    <SHeader xmlns="http://www.softwareonline.hu/">
      <UserName>string</UserName>
      <Password>string</Password>
      <EmpID>string</EmpID>
    </SHeader>
  </soap:Header>
A mag a meghívandó metódus nevével:
  <soap:Body>
    <GetDatas xmlns="http://www.softwareonline.hu/" />
  </soap:Body>
</soap:Envelope>
A metódust nem is tudjuk meghívni a böngészőből, mert a fejlécet nem tudjuk feltölteni.
A meghívandó szerviz-metódust a következő attribútummal kell deklarálni annak érdekében, hogy a fejlécet azonosíthassa:
[WebMethod(),SoapHeader("headerObject")]
public string[] GetDatas()
{
A metódus visszatérési értéke egy karakterlánc-tömb, mely az adott rekord mezőit tartalmazza. Az adatokat a szerviz mappájában található Employees.xml állományból olvassa ki a szerviz. A művelet csak a fejléc ellenőrzése után kerül végrehajtásra:
  if (headerObject.UserName == "user" && headerObject.Password == "pwd" && headerObject.EmpID != "")
  {
    ...
  }
  ...
És csak a megfelelő azonosító esetén kezdjük feltölteni a tömböt:
  if (empid != -1)
  {
    pList = new string[ds.Tables[0].Columns.Count];
    for(int i=0;i<ds.Tables[0].Columns.Count;i++) 
    {
      pList[i] = ds.Tables[0].Rows[empid][i].ToString();
    }
  }
  return pList;
}
A tömb értéke NULL lesz, ha nem a megfelelő értékekkel hívjuk meg a metódust.
Kliens-alkalmazás elkészítése
A metódusok eléréséhez szükségünk lesz egy proxy osztályra, melynek elkészítéséhez a Visual Studio.NET WSDL.EXE segédprogramját fogjuk felhasználni. A segédprogramnak paraméterként megadjuk a generálandó állomány nevét, valamint azt a címet, ahol a szerviz megtalálható:
wsdl /out: C:\Service.cs http://localhost/SoapHeaderUsage/Service1.asmx
Az elkészült proxy-osztály rendelkezésre áll, már csak fel kel használni az alkalmazásunkból. Csatolnunk kell projektünkhöz. A proxy felhasználásához el kell érnünk a SOAP protokoll kezeléséhez szükséges névteret, így a forrás fejlécében adjuk meg a következő sort:
using System.Web.Services.Protocols;
A művelet a LETÖLT gombbal indítható a szerkesztőmezők feltöltése után. Először példányosítjuk a proxy osztályt:
Service1 s = new Service1();
Létrehozunk egy példányt a fejléc osztályából is:
SHeader header = new SHeader();
Megadjuk a fejléc tagváltozóinak értékeként a mezők értékeit:
header.EmpID = textBox1.Text;
header.UserName = textBox2.Text;
header.Password = textBox3.Text;
Majd a proxy újdonsült változójának, mely a fejlécet takarja, megadjuk a feltöltött objektumot:
s.SHeaderValue = header;
A metódust most már meghívhatjuk. Ellenkező esetben a hibaüzenet jelzi, hogy a fejléc objektum nem rendelkezik a várt adatokkal.
string[] pList = s.GetDatas();
Az eredményt a Form ListBox kontroljában listázzuk ki. A kliens-alkalmazás kérésére a következő válasz érkezik XML formátumban:
<soap:Envelope ...>
...
  <soap:Body>
    <GetDatasResponse xmlns="http://www.softwareonline.hu/">
      <GetDatasResult>
        <string>string</string>
        <string>string</string>
      </GetDatasResult>
    </GetDatasResponse>
  </soap:Body>
</soap:Envelope>

Cikksorozat

#IDKategóriaCikk címeSorozat
2591WindowsTippek és trükkök - RAS - Modem csengetési szám állítása1. rész
2622WindowsTippek és trükkök - Program futtatása más felhasználóként2. rész
2640WindowsA Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák3. rész
2657WindowsTippek és trükkök - Internet Explorer4. rész
2667WindowsTippek és trükkök5. rész
2684WindowsAlapértelmezések állítása, telepítési fájlok helye, intéző nézetek6. rész
2696WindowsBiztonsági trükkök7. rész
2702WindowsWindows XP trükkök8. rész
2729WindowsWindows 2000 és XP tippek, trükkök9. rész
2757WindowsRegistry trükkök10. rész
2784WindowsTippek, trükkök11. rész
2829WindowsTippek, trükkök12. rész
2889WindowsWindows XP tippek13. rész
2909WindowsTippek Windows XP-hez14. rész
2919WindowsWindows tippek15. rész
2924WindowsWindows tippek16. rész
2963WindowsWindows tippek17. rész
2973WindowsWindows Tippek18. rész
2981WindowsWindows tippek19. rész
2990WindowsTippek-trükkök20. rész
3027WindowsIIS tippek21. rész
3034WindowsWindows XP tippek-trükkök22. rész
3088WindowsWindows 2000/XP tippek, trükkök23. rész
3133WindowsWindows XP tippcsokor24. rész
3140WindowsWindows XP tippek, trükkök25. rész
3152WindowsXP és IIS tippek - trükkök26. rész
3158WindowsWindows XP tippek, trükkök27. rész
3168WindowsTippek, trükkök28. rész
3170WindowsRegistry trükkök29. rész
3179WindowsTippek, trükkök30. rész
3197WindowsWindows XP tippek, trükkök31. rész
3205WindowsTippek, trükkök32. rész
3214WindowsTippek, trükkök33. rész
3223WindowsTippek, trükkök34. rész
3233WindowsTippek, trükkök35. rész
3271WindowsTippek, trükkök36. rész
3307WindowsTippek, trükkök37. rész
3370WindowsTippek, trükkök38. rész
3399WindowsTippek, trükkök39. rész
3510WindowsTippek, trükkök40. rész
3611WindowsHardverrel kapcsolatos tippek, trükkök41. rész
3668WindowsRegistry trükkök42. rész
3711WindowsTippek, trükkök43. rész
3771WindowsTippek, trükkök44. rész
3801WindowsTippek, trükkök45. rész
3831WindowsTippek, trükkök46. rész
3891WindowsTippek, trükkök47. rész
3921WindowsTippek, trükkök48. rész
3981WindowsTippek, trükkök49. rész
4041WindowsTippek, trükkök50. rész
4071WindowsTippek, trükkök51. rész
4151WindowsTippek, trükkök52. rész
4171C#Tippek, trükkök53. rész
4211WindowsTippek, trükkök54. rész
4251WindowsTippek, trükkök55. rész
4281WindowsTippek, trükkök56. rész
3589DelphiTippek, trükkök57. rész
3718DelphiTippek, trükkök58. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 233. 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 |