FEJLESZTÉSI KERETRENDSZER ÉS KOMPONENSTÁR
A dokumentum az Új Magyarország Fejlesztési Terv keretében, az Államreform Operatív Program támogatásával, az Elektronikus közigazgatási keretrendszer tárgyú kiemelt projekt megvalósításának részeként készült. A dokumentum elkészítésében részt vett:
Metaadat-táblázat Megnevezés Cím (dc:title) Kulcsszó (dc:subject) Leírás (dc:description) Típus (dc:type) Forrás (dc:source) Kapcsolat (dc:relation) Terület (dc:coverage) Létrehozó (dc:creator) Kiadó (dc:publisher) Résztvevı (dc:contributor) Jogok (dc:rights) Dátum (dc:date) 2008.09.22 Formátum (dc:format) Azonosító (dc:identifier) Nyelv (dc:language) Verzió (dc:version) Státusz (State) Fájlnév (FileName) Méret (Size) Ár (Price) Felhasználási jogok (UserRights) Leírás Fejlesztési keretrendszer és komponenstár Az e-közigazgatás informatikai rendszere, e-közigazgatás, szolgáltatás alapú architektúra A dokumentum a szolgáltató állam által a közeljövıben kialakítandó ügyfélközpontú és ügyfélbarát elektronikus közigazgatási szolgáltatások megvalósításához szükséges informatikai rendszer felépítésére tesz javaslatot. Tárgyalja az e-közigazgatás szereplıinek kapcsolódási rendszerét, az e-közigazgatási rendszer tipikus komponenseit, az ügyfelek és szolgáltatók kapcsolódási módjait, az egységes kapcsolatrendszert biztosító e-közigazgatási szolgáltatási sín csatlakozási felületének leírását és a csatlakozás adminisztratív feltételeit. Szöveg Magyarország e-közigazgatási Keretrendszer Kialakítása projekt Miniszterelnöki Hivatal BME Informatikai Központ Magyar V1 Végleges EKK_ekozig_FejlesztesiKeretrendszerKomponenstar_080922_V1.doc
Verziókövetési táblázat A dokumentum neve Fejlesztési keretrendszer és komponenstár A dokumentum készítıjének neve BME IK A dokumentum jóváhagyójának neve A dokumentum készítésének dátuma 2009.09.21. Verziószám V1 Összes oldalszám 31 A projekt azonosítója e-közigazgatási Keretrendszer Kialakítása projekt Változáskezelés Verzió Dátum A változás leírása V1 2008.09.22. végleges V2 V3
Szövegsablon Megnevezés Leírás 1. Elıszó (Foreword) Az Elektronikus Közigazgatási Keretrendszer Kialakítása (EK3) projekt részeként indult Alkalmazásfejlesztési keretrendszer kidolgozása alprojekt célja: A magyar e-közigazgatási rendszer szolgáltatásorientált architektúrájának specifikálása A közigazgatási szolgáltatási sín (ESB) és mőködési rendjének specifikálása Fejlesztési útmutató és menetrend (roadmap) elkészítése Fejlesztési keretrendszer és komponenstár tartalmi meghatározása A fenti témákban oktatási csomagok kidolgozása Jelen dokumentum az alprojekt egyik terméke. 2. Bevezetés (Preamble) A dokumentum tárgyalja a fejlesztési keretrendszer és komponenstár telepítési útmutatóját valamint egy példát, amely lépésrıl lépésre bemutatja a keretrendszer és a komponenstár használatának módját. 3. Alkalmazási terület (Scope) Elektronikus közigazgatás 4. Rendelkezı hivatkozások (References) 5. Fogalom-meghatározások (Definitions) 6. A szabvány egyedi tartalma (UniqueContent) 7. Bibliográfia 8. Rövidítésgyőjtemény 9. Fogalomtár 10. Ábrák 11. Képek 12. Fogalmak 13. Verzió 14. Mellékletek (Appendix)
Tartalomjegyzék OpenAmeos...8.NET 3.5 és Windows SDK...10 JAX-WS RI...12 A kódgenerátor konfigurálása...13 Modellezés: projekt létrehozása...14 Modellezés: osztálydiagramok elkészítése...16 Modell exportálása...20 Kódgenerálás...21 Szolgáltatások implementálása...22 Folyamat elkészítése...24 Telepítés...29 Tesztelés...29
SOA fejlesztői keretrendszer és komponenstár telepítési és felhasználói útmutató Bevezetés Ez a dokumentum az XSD, WSDL és BPEL kódok generálására alkalmas kódgenerátor telepítésének és használatának menetét írja le. Először a beszerzendő komponensek és ezek telepítési útmutatói kerülnek ismertetésre. A dokumentum második fele az Ameos modellező eszköz és a generátor használatának módját mutatja be.
A telepítő tartalma A SoaCodeGenInstall.zip fájl tartalma: Ameos: az Ameos-hoz tartozó komponensek o Mof2Xmi: TDL kódgenerátor Ameos-hoz, amely az UML modellt MOF XMI-ba menti o Profile: a specifikált profile XSD, WSDL és BPEL generálásához Docs: dokumentációk SoaCodeGenerator: a kódgenerátor binárisai Telepítés OpenAmeos Modellezéshez az OpenAmeos nevű eszköz használható. Ez letölthető a következő címről: http://www.openameos.org/ Telepítéskor érdemes egy szóközt és ékezetet nem tartalmazó könyvtárat választani, pl: C:\Programs\OpenAmeos9.2.0 A telepítés után a csatolt Ameos\Mof2Xmi\main.tdl fájlt másoljuk be a következő könyvtárba: C:\Programs\OpenAmeos9.2.0\templates\uml\tdl\Languages\Mof2Xmi\main.tdl A projektek elhelyezéséhez hozzuk létre az alábbi könyvtárat: C:\Programs\OpenAmeos9.2.0\Projects Indítsuk el az Ameos-t, majd állítsuk be az alapértelmezett projektkönyvtárat (Admin/Preferences ): A Project Directory sorba írjuk be a következőt: C:\Programs\OpenAmeos9.2.0\Projects
Kattintsunk az OK gombra, majd az újraindítási kérdésre válaszoljunk nemmel, és manuálisan lépjünk ki. (Az automatikus újraindítás nem működik.) A base-line-ok elhelyezéséhez készítsük el az alábbi könyvtárat: C:\Programs\OpenAmeos9.2.0\Projects\baseline A profile telepítéséhez a csatolt Ameos\Profile\xsdwsdlbpel_profile.zip-et másoljuk be a következő könyvtárba: C:\Programs\OpenAmeos9.2.0\Projects\baseline Indítsuk el az Ameos-t, és kattintsunk a System/Baselines/Restore Selected Baseline menüpontra:
Adjuk meg az alábbi adatokat (fontos, hogy a Profiles könyvtárat válasszuk célkönyvtárnak!): Kattintsunk az OK gombra, így a profile telepítésre kerül. Lépjünk ki az Ameos-ból és az Ameos főkönyvtárában lévő C:\Programs\OpenAmeos9.2.0\ToolInfo.W32NTX86 fájlban keressük meg a következő sort: uml_profiles=c:\programs\openameos9.2.0\profiles/uml_profile ezt egészítsük ki, hogy az új profile-t is tartalmazza, pl.: uml_profiles=c:\programs\openameos9.2.0\profiles/uml_profile;c:\programs\openameos9.2.0\profiles/xsdwsdlbpel_profile (Amennyiben másik telepítési könyvtárat választottunk, értelemszerűen cseréljük le mindenhol az elérési útvonalakat.) Az Ameos ezzel készen áll a fejlesztésre..net 3.5 és Windows SDK A C# fájlok előállításához és fordításához szükség van az SvcUtil segédprogramra és a C# fordítóra. Ezek a Visual Studio 2008 telepítése után automatikusan elérhetők, de az eszköz nagyon sok helyet foglal. Ha a Visual Studio telepítését mellőzni kívánjuk, akkor a következő komponenseket kell letölteni és telepíteni ebben a sorrendben: 1..NET 2.0: http://www.microsoft.com/downloads/details.aspx?familyid=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displaylang=en (22.4 MB) 2..NET 3.0: http://www.microsoft.com/downloads/details.aspx?familyid=10cc340b-f857-4a14-83f5-25634c3bf043&displaylang=en (2.8 MB) 3..NET 3.5: http://www.microsoft.com/downloads/details.aspx?familyid=333325fd-ae52-4e35-b531-508d977d32a6&displaylang=en (2.7 MB) Ezt követően a C# fordító alapértelmezett elérési útvonala (a továbbiakban [Csc]): c:\windows\microsoft.net\framework\v3.5\csc.exe
Ezután még a Windows SDK-t kell telepíteni: http://www.microsoft.com/downloads/details.aspx?familyid=e6e1c3df-a74f-4207-8586- 711EBE331CDC&displaylang=en A fenti linken egy kis letöltő és telepítő program van, ami csak a kiválasztott komponenseket installálja. Mivel az összes komponens elég sok helyet foglal, csak a következő komponenseket telepítsük: Telepítés után az SvcUtil.exe alapértelmezett elérési útvonala (a továbbiakban [SvcUtil]): c:\program Files\Microsoft SDKs\Windows\v6.0A\bin\SvcUtil.exe
JAX-WS RI A JAX-WS típusú szolgáltatások elkészítéséhez JDK 6-ot és a JAX-WS referencia implementációját kell beszerezni: http://java.sun.com/javase/downloads/index.jsp https://jax-ws.dev.java.net/ A JDK 6 telepítése után JAVA_HOME környezeti változót a JDK főkönyvtárára kell állítani, valamint a PATH környezeti változóban szerepeljen a java.exe könyvtára is! Ezt követően a JAX-WS RI-t tartalmazó bináris jar fájlt kell elindítani: %JAVA_HOME%\bin\java -jar JAXWS2.1.4-20080502.jar A lincensz elfogadása után a tartalma kibontásra kerül, pl. a C:\Programs\jaxws-ri könyvtárba. Ezt a könyvtárat kell megadni a JAXWS_HOME környezeti változóban. A lépések elvégzése után tehát a következőképpen nézhetnek ki a beállítások: Végül a %JAXWS_HOME%\lib\jaxb-api.jar és a %JAXWS_HOME%\lib\jaxws-api.jar fájlokat a következő könyvtárba kell másolni (ha nem létezik, létre kell hozni): %JAVA_HOME%\jre\lib\endorsed\
A kódgenerátor konfigurálása A kódgenerátor (SoaCodeGenerator.zip) kibontását követően a könyvtárban a következő fájlok találhatók: lib o amof2.0forjava.jar: a MOF metamodell Java implementációja o GenericVisitorCombinator.jar: visitor kombinátorok o MDACodeGeneratorCore.jar: a kódgenerátor magja o Mof2Loop.jar: loop bejárások a MOF metamodellhez o SbUtils.jar: néhány hasznos segédosztály o SoaCodeGenerator.jar: a kódgenerátor SoaCodeGenerator.bat: ezzel indítható a generátor config.xml: a kódgenerátor beállításai A config.xml tartalma: <?xml version="1.0" encoding="utf-8"?> <java version="1.6.0_02" class="java.beans.xmldecoder"> <object class="main.integrate.config"> <void property="csc"> <string>"c:\windows\microsoft.net\framework\v3.5\csc.exe"</string> </void> <void property="svcutil"> <string>"c:\program Files\Microsoft SDKs\Windows\v6.0A\bin\SvcUtil.exe"</string> </void> <void property="wsimport"> <string>"c:\programs\jaxws-ri\bin\wsimport.bat"</string> </void> <void property="xjc"> <string>"c:\program Files\Java\jdk1.6.0_02\bin\xjc.exe"</string> </void> </object> </java> Ebben a fájlban kell megadni az egyes eszközspecifikus generátorokra való referenciákat. A C# fordító elérési útját a csc property, az SvcUtil elérési útját az svcutil property, a JAX-WS-ben található wsimport.bat elérési útját a wsimport property, a JDK-ban található xjc.exe elérési útját az xjc property írja le. Minden elérési út abszolút legyen!
A komponenstár használata Modellezés: projekt létrehozása Első lépésként Ameos-ban meg kell rajzolni az UML osztálydiagramokat a profile-nak megfelelően. Ehhez hozzunk létre egy új Sytem-et: Adjunk neki nevet (a példában Eva):
Válasszuk ki az xsd, wsdl és bpel profile-okat: Végül az OK gomb megnyomására elkészül a System. (Windows Vistán az UAC többször (8-10) is megjelenhet, ilyenkor minden lépésben engedélyezni kell a műveletet.) Érdemes kikapcsolni a lock-okat, ha csak egyedül dolgozunk a modellen, mivel néha beragadnak, és a lock-olt modellelemeket nem lehet törölni. A kikapcsolást a következő menüponttal tehetjük meg: A megjelenő ablakban válasszuk a Locking subsystem-et:
A megjelenő parancssorban adjuk ki rendre a status, disable, status, quit, quit parancsokat: Ha ezekkel a beállításokkal készen vagyunk, rajzoljuk meg a kívánt osztálydiagramokat a profile-nak megfelelően (ld. következő szakasz). Modellezés: osztálydiagramok elkészítése Egy egyszerűsített EVA áttérési folyamatot készítünk el. Ez a következőképpen néz ki: 1. Az APEH megadja egy vállalkozó bevételét az adószám alapján. 2. A Cégbíróságnál kell átállítani a vállalkozás formáját EVÁ-ra, amely visszaadja, hogy a művelet sikeres volt-e. 3. A vezérlő folyamat először lekérdezi a bevételt, és amennyiben az nem haladja meg a 20 millió Ft-ot, átállítja a vállalkozás formáját EVÁ-ra. A folyamat bemenete a vállalkozó adószáma, kimenete az ügyintézés eredménye: átváltott-e a vállalkozás típusa EVÁ-ra. El kell készíteni tehát az APEH, a Cégbíróság és a folyamat interfészeit leíró UML osztályokat. A Class elemen jobbgombbal kattintva adjunk hozzá egy új osztálydiagramot a projekthez:
Az osztálydiagram palettája: Rajzoljunk egy package-et, nevezzük el EvaSample-nek, majd duplán kattintva rajta az Object fülön adjuk meg a színét, az Extensibility fülön pedig az alábbi beállításokat: Az Apply gomb hatására érvényre jutnak a beállítások.
Készítsük el az alábbi osztályokat a csomagon belül: Az osztályon kétszer kattintva a Members fülön értelemszerűen kitölthetők a metódusok adatai, pl.: Az Apply gomb hatására érvényre jutnak a beállítások.
Minden osztályhoz az Extensibility fülön adjuk hozzá az alábbi stereotype-okat: A Soap11Binding tagged value-inak értéke legyen a következő: Vegyük fel az alábbi dependency-ket és lássuk el őket a megfelelő stereotype-okkal:
Mentsük el a modellt, amely így készen áll a generáláshoz. Modell exportálása A modell elkészülte után futtassuk le a Mof2Xmi generátort (a főablakban jobb egérgombra jelenik meg a menü): Ennek hatására az üzenetek logjában a következők jelennek meg: Az adott projekt könyvtárában előáll a modell XMI változata, pl.: c:\programs\openameos9.2.0\projects\eva\src_files\eva.xmi Ez a bemenete a kódgenerátornak.
Kódgenerálás A kódok generálásához másoljuk át a keletkezett XMI-t a kódgenerátor könyvtárába, majd indítsuk el a SoaCodeGenerator.bat fájlt, paraméterként pedig adjuk át az XMI fájl nevét kiterjesztés nélkül! Pl.: SoaCodeGenerator.bat Eva Ha minden eszköz telepítése és konfigurálása megfelelő, akkor a keletkezett fájlok egy output nevű könyvtárban jelennek meg: output: az alapértelmezett kimeneti könyvtár o common: a korábbi fejezetekben ismertetett XSD-k, WSDL-ek és BPEL-ek schema: az XSD-k wsdl: a WSDL-ek bpel: a BPEL-ek o stubs: az eszközspecifikus stub-ok wcf: a WCF stub-jai jaxws: a JAX-WS stub-jai o projects: az eszközspecifikus projektek ActiveBPEL: az ActiveBPEL-ben megnyitható projektek (1.1 és 2.0-ás BPELhez) OpenESB: az OpenESB-ben megnyitható projektek (JAX-WS és 2.0-ás BPEL) OracleJDeveloper10g: Oracle JDeveloper 10g-ben megnyitható projektek (1.1-es BPEL) OracleJDeveloper11g: Oracle JDeveloper 11g-ben megnyitható projektek (JAX-WS) VisualStudio2008: Visual Studio 2008-ban megnyitható projektek (WCF) Másoljuk ki a kívánt eszköz megfelelő projektjét, nyissuk meg az eszközben és implementáljuk a szolgáltatásokat!
Szolgáltatások implementálása Implementáljuk a szolgáltatásokat például Visual Studio 2008-ban! Az elkészült solution-t megnyitva a következő lesz az eredmény: Írjuk meg az Apeh kódját: namespace EvaSample { public class Apeh : IApeh { // Az eredmény a kapott adószám tízszerese lesz: public long GetBevetel(string adoszam) { long result; if (long.tryparse(adoszam, out result)) return result * 10; else return 0; } } }
És a Cégbíróságét: namespace EvaSample { public class Cegbirosag : ICegbirosag { // A c:\temp\cegbirosag.txt-ben egy új bejegyzés keletkezik public bool SetVallalkozasForma(string adoszam, string forma) { using(streamwriter output = new StreamWriter(@"c:\Temp\cegbirosag.txt", true)) { output.writeline("ido: {0}", DateTime.Now); output.writeline("adoszam={0}, Forma={1}", adoszam, forma); output.writeline(); } return true; } } } A web.config-ban használjuk a következő konfigurációt: <system.servicemodel> <behaviors> <servicebehaviors> <behavior name="apehbehavior"> <servicemetadata httpgetenabled="true"/> <servicedebug includeexceptiondetailinfaults="false" /> </behavior> <behavior name="cegbirosagbehavior"> <servicemetadata httpgetenabled="true"/> <servicedebug includeexceptiondetailinfaults="false" /> </behavior> </servicebehaviors> </behaviors> <services> <service behaviorconfiguration="apehbehavior" name="evasample.apeh"> <endpoint address="" binding="basichttpbinding" contract="evasample.iapeh"/> <endpoint address="mex" binding="mexhttpbinding" contract="imetadataexchange" /> </service> <service behaviorconfiguration="cegbirosagbehavior" name="evasample.cegbirosag"> <endpoint address="" binding="basichttpbinding" contract="evasample.icegbirosag"/> <endpoint address="mex" binding="mexhttpbinding" contract="imetadataexchange" /> </service> </services> </system.servicemodel>
Folyamat elkészítése A projektet megnyitva ActiveVOS-ban:
A teljes folyamat képe:
A folyamat kódja: <?xml version="1.0" encoding="utf-8"?> <bpel:process xmlns:bpel="http://docs.oasisopen.org/wsbpel/2.0/process/executable" xmlns:eva="http://ik.bme.hu/eva" xmlns:merge="http://mdacodegenerator/xmlmerge-1.0" xmlns:xsd="http://www.w3.org/2001/xmlschema" merge:attributemode="copymissing" merge:contentmode="manual" merge:id="process" name="evaatteres" targetnamespace="http://ik.bme.hu/eva"> <bpel:extensions> <bpel:extension mustunderstand="no" namespace="http://mdacodegenerator/xmlmerge-1.0"/> </bpel:extensions> <bpel:import importtype="http://www.w3.org/2001/xmlschema" location="../schema/evasample.xsd" namespace="http://ik.bme.hu/eva"/> <bpel:import importtype="http://schemas.xmlsoap.org/wsdl/" location="../wsdl/evasample.wsdl" namespace="http://ik.bme.hu/eva"/> <bpel:import importtype="http://schemas.xmlsoap.org/wsdl/" location="../wsdl/evasamplepl20.wsdl" namespace="http://ik.bme.hu/eva"/> <bpel:partnerlinks> <bpel:partnerlink myrole="ievaatteresrole" name="ievaatteres" partnerlinktype="eva:ievaatteres_partnerlinktype"/> <bpel:partnerlink name="icegbirosagpl" partnerlinktype="eva:icegbirosag_partnerlinktype" partnerrole="icegbirosagrole"/> <bpel:partnerlink name="iapehpl" partnerlinktype="eva:iapeh_partnerlinktype" partnerrole="iapehrole"/> </bpel:partnerlinks> <bpel:variables> <bpel:variable merge:id="uid_fa0d1683-e1a7-4d74-a5f8- E8007DF9BAED_Input" messagetype="eva:ievaatteres_evaatteres_inputmessage" name="evaatteresinput"/> <bpel:variable merge:id="uid_fa0d1683-e1a7-4d74-a5f8- E8007DF9BAED_Output" messagetype="eva:ievaatteres_evaatteres_outputmessage" name="evaatteresoutput"/> <bpel:variable element="eva:getbevetel" name="getbevetelinput"/> <bpel:variable element="eva:getbevetelresponse" name="getbeveteloutput"/> <bpel:variable element="eva:setvallalkozasforma" name="setvallalkozasformainput"/> <bpel:variable element="eva:setvallalkozasformaresponse" name="setvallalkozasformaoutput"/> </bpel:variables> <bpel:sequence> <bpel:receive createinstance="yes" merge:attributemode="copymissing" merge:contentmode="auto" merge:id="uid_fa0d1683-e1a7-4d74-a5f8- E8007DF9BAED_Receive" name="evaatteresrequest" operation="evaatteres" partnerlink="ievaatteres" variable="evaatteresinput"/> <bpel:assign name="assigninit"> <bpel:copy> <bpel:from> <bpel:literal> <eva:evaatteresresponse> <eva:evaatteresresult>false</eva:evaatteresresult> </eva:evaatteresresponse> </bpel:literal> </bpel:from> <bpel:to part="parameters" variable="evaatteresoutput"/>
</bpel:copy> <bpel:copy> <bpel:from> <bpel:literal> <eva:getbevetel> <eva:adoszam>string</eva:adoszam> </eva:getbevetel> </bpel:literal> </bpel:from> <bpel:to variable="getbevetelinput"/> </bpel:copy> <bpel:copy> <bpel:from part="parameters" variable="evaatteresinput"> <bpel:query>eva:adoszam</bpel:query> </bpel:from> <bpel:to variable="getbevetelinput"> <bpel:query>eva:adoszam</bpel:query> </bpel:to> </bpel:copy> </bpel:assign> <bpel:invoke inputvariable="getbevetelinput" name="getbevetel" operation="getbevetel" outputvariable="getbeveteloutput" partnerlink="iapehpl"/> <bpel:if> <bpel:condition>$getbeveteloutput/eva:getbevetelresult <= 20000000</bpel:condition> <bpel:sequence> <bpel:assign name="assignsetvallalkozasforma"> <bpel:copy> <bpel:from> <bpel:literal> <eva:setvallalkozasforma> <eva:adoszam>string</eva:adoszam> <eva:forma>string</eva:forma> </eva:setvallalkozasforma> </bpel:literal> </bpel:from> <bpel:to variable="setvallalkozasformainput"/> </bpel:copy> <bpel:copy> <bpel:from part="parameters" variable="evaatteresinput"> <bpel:query>eva:adoszam</bpel:query> </bpel:from> <bpel:to variable="setvallalkozasformainput"> <bpel:query>eva:adoszam</bpel:query> </bpel:to> </bpel:copy> <bpel:copy> <bpel:from>'eva'</bpel:from> <bpel:to variable="setvallalkozasformainput"> <bpel:query>eva:forma</bpel:query> </bpel:to> </bpel:copy> </bpel:assign> <bpel:invoke inputvariable="setvallalkozasformainput" name="setvallalkozasforma" operation="setvallalkozasforma" outputvariable="setvallalkozasformaoutput" partnerlink="icegbirosagpl"/> <bpel:assign name="assignevaatteresoutput"> <bpel:copy> <bpel:from variable="setvallalkozasformaoutput"> <bpel:query>eva:setvallalkozasformaresult</bpel:query>
</bpel:from> <bpel:to part="parameters" variable="evaatteresoutput"> <bpel:query>eva:evaatteresresult</bpel:query> </bpel:to> </bpel:copy> </bpel:assign> </bpel:sequence> </bpel:if> <bpel:reply merge:attributemode="copymissing" merge:contentmode="auto" merge:id="uid_fa0d1683-e1a7-4d74-a5f8- E8007DF9BAED_Reply" name="evaatteresresponse" operation="evaatteres" partnerlink="ievaatteres" variable="evaatteresoutput"/> </bpel:sequence> </bpel:process> A folyamatleíró tartalma (EvaAtteres20.pdd): <?xml version="1.0" encoding="utf-8"?> <pdd:process xmlns:bpelns="http://ik.bme.hu/eva" xmlns:pdd="http://schemas.active-endpoints.com/pdd/2006/08/pdd.xsd" location="bpel/eva20/bpel/evaatteres20.bpel" name="bpelns:evaatteres" platform="enterprise"> <pdd:partnerlinks> <pdd:partnerlink name="iapehpl"> <pdd:partnerrole endpointreference="static" invokehandler="default:address"> <wsa:endpointreference xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:ns5="http://ik.bme.hu/eva" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <wsa:address>http://genius/eva/services/apeh.svc</wsa:address> <wsa:metadata> <wsa:servicename PortName="IApeh_Soap11Binding_Port">ns5:IApeh</wsa:ServiceName> </wsa:metadata> </wsa:endpointreference> </pdd:partnerrole> </pdd:partnerlink> <pdd:partnerlink name="icegbirosagpl"> <pdd:partnerrole endpointreference="static" invokehandler="default:address"> <wsa:endpointreference xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:ns5="http://ik.bme.hu/eva" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <wsa:address>http://genius/eva/services/cegbirosag.svc</wsa:address> <wsa:metadata> <wsa:servicename PortName="ICegbirosag_Soap11Binding_Port">ns5:ICegbirosag</wsa:ServiceName> </wsa:metadata> </wsa:endpointreference> </pdd:partnerrole> </pdd:partnerlink> <pdd:partnerlink name="ievaatteres">
<pdd:myrole allowedroles="" binding="msg" service="ievaatteresservice"/> </pdd:partnerlink> </pdd:partnerlinks> <pdd:references> <pdd:schema location="project:/eva20/schema/evasample.xsd" namespace="http://ik.bme.hu/eva"/> <pdd:wsdl location="project:/eva20/wsdl/evasample.wsdl" namespace="http://ik.bme.hu/eva"/> <pdd:wsdl location="project:/eva20/wsdl/evasamplepl20.wsdl" namespace="http://ik.bme.hu/eva"/> </pdd:references> </pdd:process> Telepítés Az eszközökből telepítsük a projekteket a szokásos módon! Tesztelés Készítsünk egy egyszerű konzolos tesztprogramot Visual Studio-ban és hívjuk meg a folyamatot! A projekt létrehozása után adjuk hozzá a referenciát a web-szolgáltatásra:
Ennek hatására elkészülnek a stub-ok, valamint a következő konfigurációs fálj (app.config): <?xml version="1.0" encoding="utf-8"?> <configuration> <system.servicemodel> <bindings> <basichttpbinding> <binding name="icegbirosag_soap11binding_binding" closetimeout="00:01:00" opentimeout="00:01:00" receivetimeout="00:10:00" sendtimeout="00:01:00" allowcookies="false" bypassproxyonlocal="false" hostnamecomparisonmode="strongwildcard" maxbuffersize="65536" maxbufferpoolsize="524288" maxreceivedmessagesize="65536" messageencoding="text" textencoding="utf-8" transfermode="buffered" usedefaultwebproxy="true"> <readerquotas maxdepth="32" maxstringcontentlength="8192" maxarraylength="16384" maxbytesperread="4096" maxnametablecharcount="16384" /> <security mode="none"> <transport clientcredentialtype="none" proxycredentialtype="none" realm="" /> <message clientcredentialtype="username" algorithmsuite="default" /> </security> </binding> <binding name="ievaatteres_soap11binding_binding" closetimeout="00:01:00" opentimeout="00:01:00" receivetimeout="00:10:00" sendtimeout="00:01:00" allowcookies="false" bypassproxyonlocal="false" hostnamecomparisonmode="strongwildcard" maxbuffersize="65536" maxbufferpoolsize="524288" maxreceivedmessagesize="65536" messageencoding="text" textencoding="utf-8" transfermode="buffered" usedefaultwebproxy="true"> <readerquotas maxdepth="32" maxstringcontentlength="8192" maxarraylength="16384" maxbytesperread="4096" maxnametablecharcount="16384" /> <security mode="none"> <transport clientcredentialtype="none" proxycredentialtype="none" realm="" /> <message clientcredentialtype="username" algorithmsuite="default" /> </security> </binding> <binding name="iapeh_soap11binding_binding" closetimeout="00:01:00" opentimeout="00:01:00" receivetimeout="00:10:00" sendtimeout="00:01:00" allowcookies="false" bypassproxyonlocal="false" hostnamecomparisonmode="strongwildcard" maxbuffersize="65536" maxbufferpoolsize="524288" maxreceivedmessagesize="65536" messageencoding="text" textencoding="utf-8" transfermode="buffered" usedefaultwebproxy="true"> <readerquotas maxdepth="32" maxstringcontentlength="8192" maxarraylength="16384" maxbytesperread="4096" maxnametablecharcount="16384" /> <security mode="none"> <transport clientcredentialtype="none" proxycredentialtype="none" realm="" /> <message clientcredentialtype="username" algorithmsuite="default" /> </security> </binding> </basichttpbinding> </bindings> <client> <endpoint address="http://tempurl.org" binding="basichttpbinding" bindingconfiguration="icegbirosag_soap11binding_binding" contract="evaservicereference.icegbirosag" name="icegbirosag_soap11binding_port" /> <endpoint address="http://tempurl.org" binding="basichttpbinding" bindingconfiguration="ievaatteres_soap11binding_binding" contract="evaservicereference.ievaatteres" name="ievaatteres_soap11binding_port" /> <endpoint address="http://tempurl.org" binding="basichttpbinding" bindingconfiguration="iapeh_soap11binding_binding" contract="evaservicereference.iapeh" name="iapeh_soap11binding_port" />
</client> </system.servicemodel> </configuration> A tesztelő program kódja: namespace EvaTest { class Program { static void Main(string[] args) { try { Program.TestEvaAtteres("123456"); Program.TestEvaAtteres("123456789"); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } } } public static void TestEvaAtteres(string adoszam) { EvaAtteresClient evaatteres = new EvaAtteresClient("IEvaAtteres_Soap11Binding_Port", "http://genius:8080/active-bpel/services/ievaatteresservice"); try { bool siker = evaatteres.evaatteres(adoszam); if (siker) Console.WriteLine("A(z) {0} adszámú vállalkozás formája EVÁ-ra váltott.", adoszam); else Console.WriteLine("A(z) {0} adszámú vállalkozás formája nem változott.", adoszam); } finally { evaatteres.close(); } }
A tesztet lefuttatva az eredmény a következő: A c:\temp\cegbirosag.txt tartalma: Ido: 9/19/2008 6:38:16 PM Adoszam=123456, Forma=EVA Az ActiveVOS konzolon megjelent a két folyamat: