சோப் என்றால் என்ன? எப்படி IBM SOAP4J

சோப் என்றால் என்ன? எப்படி IBM SOAP4J

பிரட் மெக்லாலின் மொழிபெயர்ப்பு இல்யா செக்மெனேவ்

SOAP என்பது எளிய பொருள் அணுகல் நெறிமுறை. இதைப் பற்றி நீங்கள் இதற்கு முன் கேள்விப்பட்டிருக்கவில்லை என்றால், நீங்கள் நாகரீகத்திலிருந்து வெகு தொலைவில் நடுவில் வாழ வேண்டும். இது வலை நிரலாக்கத்தில் சமீபத்திய ஃபேஷனாகவும், இணைய சேவைகளின் ஒருங்கிணைந்த பகுதியாகவும் மாறியுள்ளது, இது சமீபத்திய தலைமுறையின் வலை மேம்பாடுகளில் இத்தகைய வெறித்தனத்துடன் பயன்படுத்தப்படுகிறது. மைக்ரோசாப்டின் .NET அல்லது பியர்-டு-பியர் "புரட்சி" பற்றி நீங்கள் கேள்விப்பட்டிருந்தால், SOAP ஐ நம்பியிருக்கும் தொழில்நுட்பங்களைப் பற்றி நீங்கள் கேள்விப்பட்டிருப்பீர்கள் (அது என்னவென்று உங்களுக்குத் தெரியாவிட்டாலும் கூட). ஒன்று இல்லை, ஆனால் இரண்டுஅப்பாச்சி மற்றும் மைக்ரோசாப்ட் வழங்கும் SOAP செயலாக்கங்கள், அவற்றின் MSDN ஆதரவு தளத்தில் (http://msdn.microsoft.com/) ஆயிரக்கணக்கான பக்கங்களை அவர்களுக்கு அர்ப்பணித்துள்ளது.

இந்த கட்டுரையில் நான் SOAP என்றால் என்ன மற்றும் இணைய நிரலாக்க முன்னுதாரணத்தின் வளர்ச்சியில் இது ஏன் ஒரு முக்கிய பகுதியாகும். இது அடிப்படைகளைத் தவிர்த்து, SOAP கருவித்தொகுப்புடன் நேரடியாக வேலை செய்ய உதவும். பின்னர் நான் ஏற்கனவே உள்ள SOAP திட்டங்களின் விரைவான மேலோட்டத்தை தருகிறேன் மற்றும் அப்பாச்சியின் செயலாக்கத்திற்கு முழுக்கு போடுவேன். இந்தக் கட்டுரையானது SOAP இன் முழுமையான படத்தை வழங்குவதற்காக அல்ல; இந்தக் கட்டுரையைப் படித்த பிறகு எழுந்த பல கேள்விகளுக்கான பதில்களை புத்தகத்தில் காணலாம்.

அறிமுகம்

சோப் என்றால் என்ன என்பதை முதலில் நீங்கள் புரிந்து கொள்ள வேண்டும். முழு (மற்றும் மிக நீண்ட) W3C கருத்தை http://www.w3.org/TR/SOAP இல் படிக்கலாம். பின்னர், அதைக் கண்டுபிடித்து, அனைத்து உமிகளையும் நிராகரித்த பிறகு, SOAP என்பது ஒரு நெறிமுறை என்பதை நீங்கள் புரிந்துகொள்வீர்கள். இது ஒரு எளிய நெறிமுறையாகும் (அதைப் பயன்படுத்த புதிய ஒன்றை எழுத வேண்டிய அவசியமில்லை) ஒரு விநியோகிக்கப்பட்ட கட்டிடக்கலையில் ஒரு கட்டத்தில் தகவல்களைப் பரிமாறிக் கொள்ள வேண்டும் என்ற எண்ணத்தின் அடிப்படையில். கூடுதலாக, அதிக சுமைகள் மற்றும் செயலாக்க செயல்முறைகளில் சிரமங்கள் உள்ள அமைப்புகளுக்கு, இந்த நெறிமுறை மிகவும் சாதகமானது, ஏனெனில் இது இலகுரக மற்றும் குறைந்தபட்ச ஆதாரங்கள் தேவைப்படுகிறது. இறுதியாக, இது அனைத்து செயல்பாடுகளையும் HTTP மூலம் மேற்கொள்ள அனுமதிக்கிறது, இது ஃபயர்வால்கள் போன்ற தந்திரமான விஷயங்களைத் தவிர்த்து, நம்பமுடியாத எண்ணிக்கையிலான போர்ட்களில் சாக்கெட்டுகளைப் பயன்படுத்திக் கேட்பதில் இருந்து உங்களைப் பாதுகாத்துக் கொள்ள உதவுகிறது. முக்கிய விஷயம் என்னவென்றால், இதை நீங்கள் புரிந்துகொள்கிறீர்கள், மற்ற அனைத்தும் விவரங்கள்.

நிச்சயமாக, நீங்கள் இந்த விவரங்களை அறிய விரும்புகிறீர்கள், நான் அவற்றைப் புறக்கணிக்க மாட்டேன். SOAP விவரக்குறிப்பில் மூன்று அடிப்படை கூறுகள் உள்ளன: ஒரு SOAP உறை, குறியாக்க விதிகளின் தொகுப்பு மற்றும் கோரிக்கை மற்றும் பதிலுக்கு இடையிலான தொடர்புக்கான வழிமுறை. SOAP செய்தியை ஒரு வழக்கமான கடிதமாக நினைத்துக் கொள்வோம். தபால்தலை மற்றும் முகப்பில் முகவரி எழுதப்பட்ட உறைகளில் அந்தப் பழங்கால விஷயங்கள் இன்னும் நினைவில் இருக்கிறதா? இந்த ஒப்புமை, SOAP இன் ஒரு "உறை" என்ற கருத்தை இன்னும் தெளிவாகப் புரிந்துகொள்ள உதவும். படம் 12-1 இந்த ஒப்புமை வடிவத்தில் SOAP செயல்முறைகளை சித்தரிக்கிறது.

படம் 12-1. SOAP செய்தி செயல்முறை

இந்தப் படத்தை மனதில் வைத்து, SOAP விவரக்குறிப்பின் மூன்று கூறுகளைப் பார்ப்போம். அவை ஒவ்வொன்றையும் பற்றி நான் சுருக்கமாகப் பேசுவேன், கருத்தை சிறப்பாகக் குறிக்கும் உதாரணங்களைத் தருகிறேன். இந்த மூன்று முக்கிய கூறுகள் SOAP ஐ மிகவும் முக்கியமானதாகவும் அர்த்தமுள்ளதாகவும் ஆக்குகின்றன. பிழை கையாளுதல், பல்வேறு குறியாக்கங்களுக்கான ஆதரவு, அளவுரு வரிசைப்படுத்தல் மற்றும் பெரும்பாலான சந்தர்ப்பங்களில் HTTP இல் SOAP வேலை செய்கிறது என்பது விநியோகிக்கப்பட்ட நெறிமுறைகளுக்கான மற்ற தீர்வுகளை விட கவர்ச்சிகரமானதாக அமைகிறது. SOAP ஆனது மற்ற பயன்பாடுகளுடன் அதிக அளவில் இயங்கக்கூடிய தன்மையை வழங்குகிறது, அதை நான் எனது புத்தகத்தில் இன்னும் விரிவாகப் பேசினேன். இப்போதைக்கு, SOAP இன் முக்கிய கூறுகளில் கவனம் செலுத்த விரும்புகிறேன்.

உறை

ஒரு SOAP உறை வழக்கமான கடித உறை போன்றது. முக்கிய SOAP பிரிவில் குறியாக்கம் செய்யப்படும் செய்தியைப் பற்றிய தகவல்களும், பெறுநர் மற்றும் அனுப்புநர் பற்றிய தகவல்களும், செய்தியைப் பற்றிய தகவல்களும் இதில் உள்ளன. எடுத்துக்காட்டாக, SOAP உறை தலைப்பு செய்தி எவ்வாறு செயலாக்கப்பட வேண்டும் என்பதைக் குறிக்கலாம். ஒரு பயன்பாடு ஒரு செய்தியைச் செயலாக்கத் தொடங்கும் முன், அது செய்தியைப் பற்றிய தகவலை ஆராய்கிறது, அதில் செய்தியைச் செயலாக்க முடியுமா என்பது உட்பட. நிலையான எக்ஸ்எம்எல்-ஆர்பிசி அழைப்புகள் (நினைவில் உள்ளதா? எக்ஸ்எம்எல்-ஆர்பிசி செய்திகள், குறியாக்கம் போன்றவை) நிலைமையைப் போலல்லாமல், எல்லாமே ஒரே எக்ஸ்எம்எல் துண்டாக இணைக்கப்பட்டுள்ளது), SOAP உடன் செய்தியைப் பற்றி ஏதாவது அறிந்து கொள்வதற்காகச் செயலாக்கம் நடைபெறுகிறது. ஒரு பொதுவான SOAP செய்தியில் ஒரு குறியாக்க பாணியும் இருக்கலாம், இது செய்தியை செயலாக்க பெறுநருக்கு உதவும். எடுத்துக்காட்டு 12-1 ஒரு SOAP உறையைக் காட்டுகிறது, அது குறியீட்டு விவரக்குறிப்புடன் முடிவடைகிறது.

எடுத்துக்காட்டு 12-1: SOAP உறை

சோப்புப்பெட்டி http://www-106.ibm.com/developerworks/library/x-soapbx1.html

நீங்கள் பார்க்க முடியும் என, மறைகுறியாக்கம் உறைக்குள் அமைக்கப்பட்டுள்ளது, இது பயன்பாட்டை தீர்மானிக்க அனுமதிக்கிறது (பண்பு மதிப்பைப் பயன்படுத்தி என்கோடிங் ஸ்டைல்), உறுப்பில் உள்ள உள்வரும் செய்தியைப் படிக்க முடியுமா உடல். SOAP உறை பெயர்வெளி சரியாக உள்ளதா அல்லது உங்கள் செய்தியைப் பெறும் SOAP சேவையகங்கள் பதிப்பு பொருந்தாத பிழையைப் புகாரளிக்கும், மேலும் உங்களால் அவர்களுடன் தொடர்பு கொள்ள முடியாது.

குறியாக்கம்

SOAP இன் இரண்டாவது முக்கியமான உறுப்பு தனிப்பயன் தரவு வகைகளை குறியாக்கம் செய்யும் திறன் ஆகும். RPC (மற்றும் XML-RPC) உடன், நீங்கள் பதிவிறக்கிய XML-RPC கருவித்தொகுப்பில் ஆதரிக்கப்படும் முன் வரையறுக்கப்பட்ட தரவு வகைகளில் மட்டுமே குறியாக்கம் செய்ய முடியும். பிற வகையான தரவை குறியாக்கம் செய்ய, RPC சேவையகத்தையும் கிளையண்டையும் நீங்களே மாற்றியமைக்க வேண்டும். SOAP உடன், புதிய தரவு வகைகளை (கட்டமைப்பைப் பயன்படுத்தி) குறிப்பிடுவதற்கு XML ஸ்கீமாவை மிக எளிதாகப் பயன்படுத்தலாம். சிக்கலான வகை, எனது புத்தகத்தின் அத்தியாயம் 2 இல் விவாதிக்கப்பட்டது), மேலும் இந்த புதிய வகைகளை SOAP இன் முக்கிய பிரிவின் ஒரு பகுதியாக XML இல் குறிப்பிடலாம். எக்ஸ்எம்எல் ஸ்கீமா ஒருங்கிணைப்புக்கு நன்றி, எக்ஸ்எம்எல் ஸ்கீமாவில் தர்க்கரீதியாக விவரிப்பதன் மூலம் SOAP செய்தியில் எந்த வகையான தரவையும் குறியாக்கம் செய்யலாம்.

அழைப்பு

SOAP அழைப்பு எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்துகொள்வதற்கான சிறந்த வழி, XML-RPC போன்ற உங்களுக்குத் தெரிந்தவற்றுடன் ஒப்பிடுவதாகும். நீங்கள் நினைவுகூர்ந்தால், எக்ஸ்எம்எல்-ஆர்பிசி அழைப்பு எடுத்துக்காட்டு 12-2 இல் வழங்கப்பட்ட குறியீடு துணுக்கைப் போலவே இருக்கும்.

எடுத்துக்காட்டு 12-2. XML-RPC க்கு அழைக்கவும்

// XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser") ஐப் பயன்படுத்த XML செயலியைக் (பாகுபடுத்தி) குறிப்பிடுதல்; // XmlRpcClient கிளையண்ட் = புதிய XmlRpcClient("http://rpc.middleearth.com") இணைக்கப்பட்டுள்ள சர்வரைக் குறிப்பிடுதல்; // அளவுருக்களை உருவாக்குதல் திசையன் அளவுருக்கள் = புதிய வெக்டர்(); params.addElement(flightNumber); params.addElement(numSeats); params.addElement(creditCardType); params.addElement(creditCardNum); // பூலியன் வாங்கிய டிக்கெட்டுகளை கோருங்கள் = (பூலியன்)client.execute("ticketCounter.buyTickets", params); // பதிலைச் செயலாக்கவும்

விமான டிக்கெட்டுகளை ஆர்டர் செய்வதற்கான எளிய திட்டத்தை உருவாக்கினேன். இப்போது எடுத்துக்காட்டு 12-3 ஐப் பாருங்கள், இது ஒரு SOAP அழைப்பைக் காட்டுகிறது.

எடுத்துக்காட்டு 12-3. SOAP க்கு அழைக்கவும்

// அளவுருக்களை உருவாக்குதல் திசையன் அளவுருக்கள் = புதிய வெக்டர்(); params.addElement(புதிய அளவுரு("flightNumber", Integer.class, flightNumber, null)); params.addElement(புதிய அளவுரு("numSeats", Integer.class, numSeats, null)); params.addElement(புதிய அளவுரு("creditCardType", String.class, creditCardType, null)); params.addElement(புதிய அளவுரு("creditCardNumber", Long.class, creditCardNum, null)); // அழைப்பு பொருளை உருவாக்குதல் அழைப்பு அழைப்பு = புதிய அழைப்பு(); call.setTargetObjectURI("urn:xmltoday-airline-tickets"); call.setMethodName("buyTickets"); call.setEncodingStyleURI(நிலைகள்.NS_URI_SOAP_ENC); call.setParams(params); // கால் ரெஸ்பான்ஸ் ரெஸ் = call.invoke(புதிய URL("http://rpc.middleearth.com"), ""); // பதிலைச் செயலாக்கவும்

நீங்கள் பார்க்க முடியும் என, பொருளால் குறிப்பிடப்படும் உண்மையான அழைப்பு அழைப்பு, நினைவக குடியிருப்பாளர். அழைப்பு இலக்கு, அழைப்பு முறை, குறியாக்க நடை, அளவுருக்கள் மற்றும் இந்த எடுத்துக்காட்டில் வழங்கப்படாத பல அளவுருக்களைக் குறிப்பிட இது உங்களை அனுமதிக்கிறது. இது எக்ஸ்எம்எல்-ஆர்பிசி முறையை விட மிகவும் நெகிழ்வான பொறிமுறையாகும், இது எக்ஸ்எம்எல்-ஆர்பிசியில் மறைமுகமாக வரையறுக்கப்பட்ட வெவ்வேறு அளவுருக்களின் தொகுப்பை வெளிப்படையாகக் குறிப்பிட அனுமதிக்கிறது. இந்தக் கட்டுரையில், SOAP தவறான கோரிக்கைகளை எவ்வாறு கையாளுகிறது, பிழை படிநிலை மற்றும், நிச்சயமாக, அழைப்பு முடிவுகள் திரும்பியது உட்பட, அழைப்பு செயல்முறை பற்றி மேலும் அறிந்து கொள்வீர்கள்.

அத்தகைய ஒரு சுருக்கமான அறிமுகத்திற்குப் பிறகு, இந்த வேடிக்கையான விஷயத்தில் ஆர்வம் காட்ட நீங்கள் ஏற்கனவே போதுமான அளவு அறிந்திருக்கிறீர்கள். இப்போது நான் பயன்படுத்தப் போகும் SOAP செயலாக்கத்தை உங்களுக்கு அறிமுகப்படுத்துகிறேன். நான் அதைத் தேர்ந்தெடுத்ததற்கான காரணங்களை விளக்குகிறேன் மற்றும் சில குறியீடு எடுத்துக்காட்டுகளைப் பார்க்கிறேன்.

அமைப்புகள்

இப்போது நீங்கள் கருத்தின் அடிப்படைகளைக் கற்றுக்கொண்டீர்கள், இது வேடிக்கையான பகுதிக்கான நேரம்: நிரலாக்கம். இதைச் செய்ய, உங்களுக்கு வசதியான திட்டம் அல்லது தயாரிப்பு தேவைப்படும், இது முதல் பார்வையில் தோன்றுவதை விட எளிதாகக் கண்டறியலாம். SOAP திறன்களை வழங்கும் ஜாவா திட்டம் உங்களுக்குத் தேவைப்பட்டால், அதைக் கண்டுபிடிக்க நீங்கள் நீண்ட நேரம் பார்க்க வேண்டியதில்லை. தயாரிப்புகளில் இரண்டு குழுக்கள் உள்ளன: வணிக மற்றும் இலவசம். எனது புத்தகத்தில் உள்ளதைப் போல, வணிகப் பொருட்களைக் குறிப்பிடுவதைத் தவிர்ப்பேன். இது மோசமானவை என்பதால் அல்ல (மாறாக, அவற்றில் சில சிறந்தவை), ஆனால் எந்தவொரு வாசகரும் கொடுக்கப்பட்ட உதாரணங்களில் ஏதேனும் ஒன்றை முயற்சிக்க வேண்டும் என்று நான் விரும்புகிறேன். இது அணுகல்தன்மை காரணமாகும், இது பல வணிக தயாரிப்புகளில் இல்லை. அவற்றைப் பயன்படுத்த நீங்கள் பணம் செலுத்த வேண்டும் அல்லது பதிவிறக்கிய பிறகு குறிப்பிட்ட காலத்திற்கு தற்காலிகமாகப் பயன்படுத்த வேண்டும்.

இதனால், திறந்த மூல திட்டங்களை நாங்கள் சுமுகமாக அணுகினோம். இந்தப் பகுதியில் இருந்து நான் ஒரே ஒரு தயாரிப்புக்கு பெயரிட முடியும்: Apache SOAP. இது http://xml.apache.org/soap இல் அமைந்துள்ளது மற்றும் ஜாவாவிற்கான SOAP கருவித்தொகுப்பை வழங்குகிறது. எழுதும் நேரத்தில், பதிப்பு 2.2 வெளியிடப்பட்டது, அதை நீங்கள் அப்பாச்சி இணையதளத்தில் இருந்து பதிவிறக்கம் செய்யலாம். இந்த பதிப்பை நான் இந்த கட்டுரைக்கான எடுத்துக்காட்டுகளில் பயன்படுத்துவேன்.

பிற மாற்றுகள்

Apache SOAP ஐ நிறுவி உள்ளமைப்பதற்கு முன், உங்கள் மனதில் தோன்றிய சில கேள்விகளுக்கு நான் பதிலளிப்பேன். நான் வணிகத் தயாரிப்புகளைப் பயன்படுத்தாததற்கான காரணங்களை நான் தெளிவாக விளக்கியிருக்கிறேன் என்று நினைக்கிறேன். இருப்பினும், நீங்கள் பயன்படுத்த விரும்பும் வேறு சில ஓப்பன் சோர்ஸ் அல்லது தொடர்புடைய திட்டங்களைப் பற்றி நீங்கள் நினைத்துக் கொண்டிருக்கலாம், மேலும் நான் அவற்றில் கருத்து தெரிவிக்காதது உங்களுக்கு ஆச்சரியமாக இருக்கிறது.

IBM SOAP4J பற்றி என்ன?

மாற்றுகளின் பட்டியலில் முதலில் ஐபிஎம்: SOAP4J இலிருந்து செயல்படுத்தப்பட்டது. IBM இன் XML4J ஆனது இப்போது அப்பாச்சி Xerces XML பாகுபடுத்தும் திட்டமாக அறியப்பட்டதைப் போலவே, ஐபிஎம்மின் பணி அப்பாச்சி SOAP திட்டத்தின் அடிப்படையாக அமைந்தது. IBM செயலாக்கம் Apache SOAP உடன் இணைந்து, மறுவடிவமைப்பு செய்யப்படும் என்று கருதப்படுகிறது. IBM இன் XML4J இல் இதேதான் நடந்தது: இப்போது இது Xerces இல் மட்டுமே பேக்கேஜிங் வழங்குகிறது - பெரிய உற்பத்தியாளர்கள் பெரும்பாலும் OpenSource திட்டங்களை ஆதரிக்கிறார்கள் மற்றும் பயன்படுத்துகிறார்கள், இந்த விஷயத்தில் இரண்டு திட்டங்களும் (Apache மற்றும் IBM) ஒரே குறியீட்டை பயன்படுத்துகின்றன.

மைக்ரோசாப்ட் விளையாட்டிலிருந்து வெளியேறிவிட்டதா?

நிச்சயமாக இல்லை. மைக்ரோசாப்ட் மற்றும் அதன் SOAP செயல்படுத்தல், அத்துடன் முழு .NET இயக்கம் (எனது புத்தகத்தில் இன்னும் விரிவாக விவாதிக்கப்பட்டது) மிகவும் குறிப்பிடத்தக்கவை. மைக்ரோசாப்டின் SOAP செயலாக்கத்தை விரிவாகப் பார்க்க எனது பெரும்பாலான நேரத்தை நான் செலவிட விரும்பினேன், ஆனால் அது COM பொருள்களை மட்டுமே ஆதரிக்கிறது மற்றும் ஜாவாவை ஆதரிக்காது. இந்த காரணங்களால், ஜாவா மற்றும் எக்ஸ்எம்எல் பற்றிய கட்டுரையில் அத்தகைய விளக்கத்தை சேர்க்க முடியவில்லை. இருப்பினும், மைக்ரோசாப்ட் (டெவலப்பர்களாகிய நாங்கள், இந்த நிறுவனத்தைப் பற்றி எல்லாப் புகார்களும் இருந்தாலும்) இணையச் சேவைத் துறையில் முக்கியமான பணிகளைச் செய்திருக்கிறது, மேலும் நீங்கள் அதைச் சிந்திக்காமல் நிராகரித்தால் தவறு செய்வீர்கள். நீங்கள் COM அல்லது விஷுவல் பேசிக் கூறுகளுடன் பணிபுரிய வேண்டும் எனில், http://msdn.microsoft.com/library/default.asp?url=/nhp/Default இல் கிடைக்கும் Microsoft SOAP கருவித்தொகுப்பைப் பயன்படுத்த முயற்சிக்குமாறு நான் மிகவும் பரிந்துரைக்கிறேன். .asp ?contentid=28000523 பல SOAP ஆதாரங்களுடன்.

அச்சு என்றால் என்ன?

உங்களில் அப்பாச்சி செயல்பாடுகளைப் பின்பற்றுபவர்கள் அப்பாச்சி அச்சு பற்றி கேள்விப்பட்டிருக்க வேண்டும். Axis என்பது Apache XML குடையின் கீழ் உருவாக்கப்பட்ட அடுத்த தலைமுறை SOAP கருவித்தொகுப்பாகும். SOAP (ஒரு விவரக்குறிப்பு, ஒரு குறிப்பிட்ட செயல்படுத்தல் அல்ல), இது சமீபத்தில் வேகமாகவும் தீவிரமாகவும் வளர்ந்து வருகிறது, பின்பற்றுவது மிகவும் கடினம். SOAP இன் பதிப்பை உருவாக்க முயற்சிப்பது தற்போதைய தேவைகளை முழுமையாக பூர்த்தி செய்யும் போது அவை உருவாகும்போது மிகவும் சவாலானது. இதன் விளைவாக, Apache SOAP இன் தற்போதைய பதிப்பு அதன் வடிவமைப்பால் வரையறுக்கப்பட்ட தீர்வை வழங்குகிறது. தற்போதுள்ள கருவியை முழுமையாக மறுவடிவமைக்க முயற்சிப்பது மதிப்புக்குரியது அல்ல என்று முடிவு செய்த பின்னர், அப்பாச்சி டெவலப்பர்கள் புதிய குறியீட்டின் அடிப்படையில் ஒரு திட்டத்தை உருவாக்கத் தொடங்கினர். இவ்வாறு அச்சு பிறந்தது. SOAP இன் பெயரும் முதலில் SOAP இலிருந்து XP ஆகவும் பின்னர் XMLP ஆகவும் மாறியது. பின்னர் புதிய SOAP இன் பெயரிலிருந்து விவரக்குறிப்பு பெயர் கைவிடப்பட்டு "Axis" என்ற பெயர் பிறந்தது. ஆனால் இப்போது W3C ஆனது SOAP விவரக்குறிப்பின் (பதிப்பு 1.2 அல்லது 2.0) பெயருக்குத் திரும்புவது போல் தெரிகிறது, அதனால் விஷயங்கள் இன்னும் மாறலாம் மற்றும் இன்னும் குழப்பம் இருக்கும்!

IBM SOAP4J ஐ SOAP கருவித்தொகுப்பின் ஒரு கட்டமைப்பாகக் கருதுங்கள். Apache SOAP (இந்த கட்டுரையில் விவாதிக்கப்பட்டது) ஒரு கட்டிடக்கலை பற்றி என்ன?2. மேலும் ஆக்சிஸ் ?3 கட்டிடக்கலை, ஒரு புதிய தலைமுறை கட்டிடக்கலையை குறிக்கிறது. இந்த திட்டம் SAX ஐப் பயன்படுத்துகிறது, அதே சமயம் Apache SOAP DOM அடிப்படையிலானது. கூடுதலாக, Axis, Apache SOAP போலல்லாமல், பயனர் தொடர்புக்கு மிகவும் பயனர் நட்பு அணுகுமுறையை வழங்குகிறது. இந்த நன்மைகளைப் பட்டியலிட்ட பிறகு, நான் ஏன் ஆக்சிஸை எனது ஆய்வுப் பாடமாகத் தேர்ந்தெடுக்கவில்லை என்று நீங்கள் யோசிக்கலாம். இது கொஞ்சம் முன்கூட்டியே இருக்கும். தற்போது, ​​ஆக்சிஸின் பதிப்பு 0.51 மட்டுமே வெளியிட தயாராக உள்ளது. இது இன்னும் பீட்டா அல்லது ஆல்பா பதிப்பு அல்ல. புதிய அச்சு அம்சங்களைப் பற்றிப் பேச விரும்புகிறேன், ஆனால் உங்கள் முக்கியமான சிஸ்டம் தேவைகளுக்கு சப்-ஆல்ஃபா ஓப்பன் சோர்ஸ் மென்பொருளைப் பயன்படுத்தலாம் என்று உங்கள் நிர்வாகத்தை நம்ப வைக்க உங்களுக்கு வாய்ப்பில்லை. எனவே நீங்கள் உண்மையாக இருக்கும் ஒன்றில் கவனம் செலுத்த முடிவு செய்தேன் நீங்கள் பயன்படுத்த முடியும்ஏற்கனவே இன்று- அப்பாச்சி சோப். Apache Axis இன் இறுதிப் பதிப்பு வெளியிடப்படும் நேரத்தில், எனது புத்தகத்தின் அடுத்த பதிப்பில் இந்த உள்ளடக்கத்தைப் புதுப்பிப்பேன் என்று நினைக்கிறேன். அதுவரை, ஏற்கனவே இருக்கும் தீர்வுக்கு கவனம் செலுத்துவோம்.

நிறுவல்

SOAP நிறுவலின் இரண்டு சாத்தியமான வடிவங்கள் உள்ளன. முதலாவதாக, SOAP செய்திகளை ஏற்கக்கூடிய சேவையகத்துடன் தொடர்புகொள்வதற்கு SOAP API ஐப் பயன்படுத்தி SOAP கிளையண்டைத் தொடங்க வேண்டும். SOAP கிளையண்டிலிருந்து செய்திகளைப் பெறக்கூடிய SOAP சேவையகத்தை இயக்குவது இரண்டாவது வழி. இந்த பகுதியில் நான் இரண்டு நடைமுறைகளையும் விவரித்துள்ளேன்.

வாடிக்கையாளர்

SOAP கிளையண்டைப் பயன்படுத்த, நீங்கள் முதலில் Apache SOAP ஐப் பதிவிறக்க வேண்டும், http://xml.apache.org/dist/soap இல் கிடைக்கும். நான் பதிப்பு 2.2 ஐ பைனரி வடிவத்தில் பதிவிறக்கம் செய்தேன் (துணை அடைவில் இருந்து பதிப்பு-2.2) பின்னர் உங்கள் கணினியில் உள்ள கோப்பகத்தில் காப்பகத்தின் உள்ளடக்கங்களை அன்சிப் செய்ய வேண்டும். என் விஷயத்தில் அது அடைவு javaxml2 (c:\javaxml2என் விண்டோஸ் கணினியில் /javaxml2எனது Mac OS X கணினியில்). இதன் விளைவாக, கோப்புகள் அன்சிப் செய்யப்பட்டன /javaxml2/soap-2_2. சன் http://java.sun.com/products/javamail/ இலிருந்து கிடைக்கும் ஜாவாமெயில் தொகுப்பையும் பதிவிறக்கம் செய்ய வேண்டும். Apache SOAP ஆல் பயன்படுத்தப்படும் SMTP பரிமாற்ற நெறிமுறையை ஆதரிக்க இது தேவைப்படும். சன் http://java.sun.com/products/beans/glasgow/jaf.html இலிருந்து கிடைக்கும் ஜாவா பீன்ஸ் ஆக்டிவேஷன் ஃப்ரேம்வொர்க்கை (JAF) பதிவிறக்கவும். நீங்கள் ஏற்கனவே Xerces அல்லது மற்றொரு XML பாகுபடுத்தியை நிறுவி பயன்படுத்த தயாராக உள்ளீர்கள் என்ற அனுமானத்தின் அடிப்படையில்.

குறிப்பு:உங்கள் XML பாகுபடுத்தி JAXP இணக்கமாக இருப்பதையும் பெயர்வெளியை சரியாகப் பயன்படுத்துவதையும் உறுதிசெய்யவும். உங்கள் பாகுபடுத்தி பெரும்பாலும் இந்தத் தேவைகளைப் பூர்த்தி செய்கிறீர்கள் என்றால், Xerces ஐப் பயன்படுத்துவதே சிறந்தது.

குறிப்பு: Xerces இன் சமீபத்திய பதிப்புகளைப் பயன்படுத்தவும். பதிப்பு 1.4 மற்றும் அதற்கு மேல் இருக்கும். SOAP மற்றும் Xerces 1.3(.1) உடன் பல பிழைகள் உள்ளன, எனவே இந்த கலவையைப் பயன்படுத்துவதற்கு எதிராக நான் அறிவுறுத்துகிறேன்.

JavaMail மற்றும் JAF தொகுப்புகளை அன்சிப் செய்து, அதன் ஜார் கோப்புகளை உங்கள் கிளாஸ்பாத் மற்றும் லைப்ரரியில் சேர்க்கவும் சோப்பு.ஜாடி. இந்த ஜார் கோப்புகள் ஒவ்வொன்றும் தொடர்புடைய நிரலின் ரூட் கோப்பகத்தில் அல்லது துணை அடைவில் இருக்க வேண்டும். /லிப். உங்கள் மாறி முடிந்ததும் வகுப்புப்பாதைஇது போன்ற ஏதாவது இருக்க வேண்டும்:

$ எக்கோ $CLASSPATH /javaxml2/soap-2_2/lib/soap.jar:/javaxml2/lib/xerces.jar: /javaxml2/javamail-1.2/mail.jar:/javaxml2/jaf-1.0.1/activation.jar

விண்டோஸைப் பொறுத்தவரை, இது இப்படி இருக்கும்:

c:\>எக்கோ %CLASSPATH% c:\javaxml2\soap-2_2\lib\soap.jar;c:\javaxml2\lib\xerces.jar; c:\javaxml2\javamail-1.2\mail.jar;c:\javaxml2\jaf-1.0.1\activation.jar

இறுதியாக அடைவைச் சேர்க்கவும் javaxml2/soap-2_2/உங்கள் வகுப்புப்பாதை SOAP எடுத்துக்காட்டுகளை இயக்க. இந்த அத்தியாயத்தில் பல உதாரணங்களுக்கான அமைப்பை விவரித்துள்ளேன்.

சேவையகம்

SOAP-இணக்கமான சேவையக கூறுகளை உருவாக்க, உங்களுக்கு முதலில் ஒரு சர்வ்லெட் இயந்திரம் தேவை. முந்தைய அத்தியாயங்களைப் போலவே, இந்த அத்தியாயத்திற்கும் உதாரணமாக Apache Tomcat (http://jakarta.apache.org/ இல் கிடைக்கிறது) பயன்படுத்தினேன். வாடிக்கையாளருக்குத் தேவையான அனைத்தையும் நீங்கள் சேர்க்க வேண்டும் வகுப்புப்பாதைசர்வர். இதைச் செய்வதற்கான எளிதான வழி மீட்டமைப்பதாகும் சோப்பு.ஜாடி, செயல்படுத்தல்.jarமற்றும் அஞ்சல்.jar, அத்துடன் உங்கள் பாகுபடுத்தி, உங்கள் சர்வ்லெட் இன்ஜினின் லைப்ரரி கோப்பகத்தில். Tomcat க்கு, இது /lib கோப்பகமாகும், இதில் தானாக ஏற்றுவதற்கான நூலகங்கள் உள்ளன. நீங்கள் ஸ்கிரிப்டுகளுக்கு ஆதரவை வழங்க விரும்பினால் (அவை இந்த அத்தியாயத்தில் விவாதிக்கப்படவில்லை, ஆனால் Apache SOAP எடுத்துக்காட்டுகளில் உள்ளன), நீங்கள் வைக்க வேண்டும் bsf.jar(http://oss.software.ibm.com/developerworks/projects/bsf இல் கிடைக்கும்) மற்றும் js.jar(http://www.mozilla.org/rhino/ இல் கிடைக்கும்) அதே கோப்பகத்தில்.

குறிப்பு:நீங்கள் Tomcat உடன் Xerces ஐப் பயன்படுத்துகிறீர்கள் எனில், அத்தியாயம் 10 இல் நான் கூறிய தந்திரத்தை நீங்கள் மீண்டும் செய்ய வேண்டும். மறுபெயரிடவும் பாகுபடுத்தி.ஜாடிவி z_parser.jar, ஏ jaxp.jarவி z_jaxp.jarஎன்பதை உறுதி செய்ய xerces.jarமற்றும் JAXP இன் சேர்க்கப்பட்ட பதிப்பு வேறு எந்த பாகுபடுத்தும் அல்லது JAXP செயல்படுத்தலுக்கு முன்பாக ஏற்றப்படும்.

உங்கள் சர்வ்லெட் இயந்திரத்தை மறுதொடக்கம் செய்யுங்கள், அதன் பிறகு நீங்கள் SOAP சேவையக கூறுகளை எழுத தயாராக உள்ளீர்கள்.

திசைவி சர்வ்லெட் மற்றும் நிர்வாக கிளையண்ட்

அடிப்படை செயல்பாடுகளைத் தவிர, Apache SOAP ஆனது ஒரு ரூட்டர் சர்வ்லெட் மற்றும் நிர்வாக கிளையண்ட் ஆகியவற்றை உள்ளடக்கியது. நீங்கள் அவற்றைப் பயன்படுத்த விரும்பாவிட்டாலும், SOAP சரியாக நிறுவப்பட்டுள்ளதா என்பதைச் சோதிக்க அவற்றை நிறுவுமாறு பரிந்துரைக்கிறேன். இந்த செயல்முறை நீங்கள் எந்த சர்வ்லெட் எஞ்சினைப் பயன்படுத்துகிறீர்கள் என்பதைப் பொறுத்தது, எனவே நிறுவல் செயல்முறையை டாம்கேட்டிற்கு வரம்பிடுவேன். வேறு சில சர்வ்லெட் என்ஜின்களுக்கான நிறுவல் வழிமுறைகளை http://xml.apache.org/soap/docs/index.html இல் காணலாம்.

Tomcat இன் கீழ் நிறுவல் மிகவும் எளிது: கோப்பை எடுக்கவும் சோப்பு.போர்அடைவில் இருந்து சோப்பு-2_2/webappsமற்றும் அதை அடைவில் விடவும் $TOMCAT_HOME/webapps- அது தான்! நிறுவலைச் சரிபார்க்க, உங்கள் உலாவியில் முகவரியை உள்ளிடவும் http://localhost:8080/soap/servlet/rpcrouter. படம் 12-2 இல் காட்டப்பட்டுள்ளதைப் போன்ற பதிலை நீங்கள் பெற வேண்டும்.

படம் 12-2. திசைவி RPC சர்வ்லெட்

செய்தி பிழைச் செய்தியாகத் தோன்றினாலும், எல்லாம் சரியாகச் செயல்படுவதைக் குறிக்கிறது. உங்கள் உலாவியை நிர்வாகியின் கிளையன்ட் முகவரிக்கு சுட்டிக்காட்டினால், அதே பதிலைப் பெறுவீர்கள்: http://localhost:8080/soap/servlet/messagerouter.

சர்வர் மற்றும் கிளையன்ட் சோதனையை முடிக்க, நீங்கள் அனைத்து வழிமுறைகளையும் முழுமையாகப் பின்பற்றியுள்ளீர்கள் என்பதை உறுதிப்படுத்தவும். RPC ரூட்டர் சர்வ்லெட்டுக்கான உங்கள் சர்வ்லெட் URL ஐ ஆதரிக்க கீழே காட்டப்பட்டுள்ளபடி பின்வரும் ஜாவா வகுப்பை இயக்கவும்:

C:\>java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter பட்டியல் பயன்படுத்தப்பட்ட சேவைகள்:

மேலே காட்டப்பட்டுள்ளபடி நீங்கள் சேவைகளின் வெற்று பட்டியலைப் பெற வேண்டும். நீங்கள் ஏதேனும் செய்திகளைப் பெற்றால், http://xml.apache.org/soap/docs/trouble/index.html இல் உள்ள சாத்தியமான பிழைகளின் நீண்ட பட்டியலை மதிப்பாய்வு செய்யவும். நீங்கள் சந்திக்கும் சிக்கல்களின் மிக விரிவான பட்டியல் இதுவாகும். நீங்கள் ஒரு வெற்று பட்டியலைப் பெற்றால், அமைப்பு முடிந்தது மற்றும் இந்த அத்தியாயத்தில் கொடுக்கப்பட்டுள்ள எடுத்துக்காட்டுகளைப் பார்க்கத் தயாராக உள்ளீர்கள் என்று அர்த்தம்.

ஆரம்பிக்கலாம்

எந்த SOAP அடிப்படையிலான அமைப்புகளையும் எழுதுவதில் மூன்று முக்கிய நிலைகள் உள்ளன. அவற்றைப் பட்டியலிட்ட பிறகு, அவை ஒவ்வொன்றையும் சுருக்கமாக விவாதிப்பேன்:

  • SOAP-RPC மற்றும் SOAP செய்திகளுக்கு இடையே தேர்வு செய்தல்;
  • SOAP சேவையை எழுதுதல் அல்லது அணுகுதல்;
  • SOAP கிளையண்டை எழுதுதல் அல்லது அணுகுதல்.

RPC அழைப்புகளுக்கு (இதில் ரிமோட் செயல்முறை சர்வரில் செயல்படுத்தப்படுகிறது) அல்லது செய்திகளுக்கு (கிளையன்ட் சர்வருக்கு தகவல்களை அனுப்பும்) SOAPஐப் பயன்படுத்த வேண்டுமா என்பதைத் தேர்ந்தெடுப்பது முதல் படியாகும். இந்த செயல்முறைகளை நான் கீழே விரிவாகப் பேசுகிறேன். நீங்கள் இந்த முடிவை எடுத்தவுடன், நீங்கள் உங்கள் சொந்த சேவையை அணுக வேண்டும் அல்லது உருவாக்க வேண்டும். நிச்சயமாக, நாங்கள் அனைவரும் ஜாவா வல்லுநர்கள் என்பதால், உங்கள் சொந்தமாக எவ்வாறு உருவாக்குவது என்பதை இந்த அத்தியாயம் உள்ளடக்கியது. இறுதியாக, இந்த சேவைக்கு நீங்கள் ஒரு கிளையண்டை எழுத வேண்டும், அவ்வளவுதான்!

RPC அல்லது மெசேஜிங்?

உங்கள் முதல் பணிக்கு நிரலாக்கத்துடன் எந்த தொடர்பும் இல்லை மற்றும் வடிவமைப்பு இயல்புடையது. நீங்கள் RPC அல்லது செய்திகள் சேவையைப் பயன்படுத்துவீர்களா என்பதை நீங்கள் தேர்வு செய்ய வேண்டும். நீங்கள் RPC பற்றி நன்கு அறிந்திருப்பீர்கள் என்று கருதுவோம் (உதாரணமாக, எனது புத்தகத்தின் அத்தியாயங்களில் ஒன்றைப் படிப்பதன் மூலம்). கிளையன்ட் சர்வரில் ஒரு ரிமோட் நடைமுறையை செயல்படுத்தி அதன் பிறகு பதிலைப் பெறுகிறார். இந்த சூழ்நிலையில், SOAP ஆனது மேம்பட்ட XML-RPC அமைப்பாக செயல்படுகிறது, இது சிறந்த பிழை கையாளுதல் மற்றும் நெட்வொர்க்கில் சிக்கலான தரவு வகைகளை மாற்றுகிறது. இந்த கருத்தை நீங்கள் ஏற்கனவே நன்கு அறிந்திருக்கிறீர்கள், மேலும் RPC அமைப்புகள் SOAP இல் எழுதுவது எளிதாக இருப்பதால், நான் அவற்றிலிருந்து தொடங்குகிறேன். RPC சேவை, RPC கிளையன்ட் மற்றும் கணினியை எவ்வாறு உருவாக்குவது என்பதை இந்தக் கட்டுரை விவரிக்கிறது.

SOAP வேலை செய்வதற்கான மற்றொரு வழி செய்தி பரிமாற்றத்தை அடிப்படையாகக் கொண்டது. தொலைநிலை நடைமுறைகளைச் செய்வதற்குப் பதிலாக, தகவல் பரிமாற்றத்திற்கு மட்டுமே இது பயன்படுத்தப்படுகிறது. நீங்கள் யூகிக்க முடியும் என, இது ஒரு சக்திவாய்ந்த கருவியாகும், இது கிளையன்ட் எந்த சேவையகத்தின் தனிப்பட்ட முறைகளை அறிந்து கொள்ள தேவையில்லை. மற்ற அமைப்புகளுக்கு அனுப்பப்படும் தரவு பாக்கெட்டுகளை (உருவ அர்த்தத்தில் பாக்கெட்டுகள், பிணைய அர்த்தத்தில் அல்ல) அனுமதிப்பதன் மூலம் தொலைநிலை அமைப்புகளின் மாதிரியாக்கத்தை மேலும் தனிமைப்படுத்துகிறது. அதே நேரத்தில், இந்தத் தரவைக் கொண்டு செய்யப்படும் செயல்பாடுகளைப் பற்றி மற்ற அமைப்புகள் தெரிந்து கொள்ள வேண்டியதில்லை. இந்த பாணி RPC நிரலாக்கத்தை விட மிகவும் சிக்கலானது, எனவே நான் அதை இங்கே விவரிக்க மாட்டேன். வணிகம்-வணிகம் தொடர்பான பிற விவரங்களுடன் எனது புத்தகத்தில் அதைக் காணலாம். முதலில், SOAP-RPC நிரலாக்கத்தைப் பற்றி அறிந்து கொள்ளுங்கள்.

பெரும்பாலான வடிவமைப்பு சிக்கல்களைப் போலவே, இந்த முடிவை எடுப்பது உங்களுடையது. உங்கள் விண்ணப்பத்தை ஆராய்ந்து, நீங்கள் ஏன் SOAP ஐப் பயன்படுத்த வேண்டும் என்பதைத் தீர்மானிக்க முயற்சிக்கவும். தேவைக்கேற்ப குறிப்பிட்ட வணிகச் செயல்பாடுகளைச் செய்யும் சேவையகமும் வாடிக்கையாளர்களின் தொகுப்பும் உங்களிடம் இருந்தால், RPC உங்களுக்கு மிகவும் பொருத்தமானது. தேவைக்கேற்ப குறிப்பிட்ட வணிகச் செயல்பாடுகளைச் செய்வதை விட தரவுப் பரிமாற்றம் அதிகமாக இருக்கும் சிக்கலான அமைப்புகளில், SOAP செய்திகளைப் பயன்படுத்துவது மிகவும் விரும்பத்தக்கது.

RPC சேவை

இப்போது சம்பிரதாயங்கள் முடிந்து, செயல்பட வேண்டிய நேரம் வந்துவிட்டது. உங்களுக்குத் தெரியும், RPC இல் உங்களுக்கு வகுப்புகள் தேவைப்படும், அதன் முறைகள் தொலைநிலையில் செயல்படுத்தப்படும்.

குறியீடு துணுக்குகள்

சேவையகத்திற்கான சில குறியீடு துணுக்குகளைப் பார்த்து ஆரம்பிக்கிறேன். இந்த துண்டுகள் RPC வாடிக்கையாளர்களுக்காக செயல்படுத்தப்படும் முறைகள் கொண்ட வகுப்புகள். எனது புத்தகத்திலிருந்து குறியீட்டை உதாரணங்களாகப் பயன்படுத்தினேன். எளிய வகுப்புகளைப் பயன்படுத்துவதற்குப் பதிலாக, SOAP இன் திறன்களை முடிந்தவரை தெளிவாகக் காட்ட மிகவும் சிக்கலான உதாரணத்தைத் தேர்ந்தெடுத்தேன். எனவே, நான் சிடி வகுப்பை உதாரணமாகப் பயன்படுத்தினேன். முதலில் நாம் உறுப்பை வரையறுக்கிறோம் வரைபடம்ஒவ்வொரு தரமற்ற அளவுரு வகைக்கும். பண்புக்காக என்கோடிங் ஸ்டைல், குறைந்தபட்சம் Apache SOAP 2.2 இல். நீங்கள் மதிப்பை வழங்க வேண்டும் http://schemas.xmlsoap.org/soap/encoding/ . தற்போது இது மட்டுமே ஆதரிக்கப்படும் குறியாக்கம் ஆகும். பயனர் வரையறுக்கப்பட்ட வகைக்கான பெயர்வெளியை நீங்கள் குறிப்பிட வேண்டும், பின்னர் அந்த வகைக்கான பெயர்வெளியுடன் வகுப்பின் பெயரை முன்னொட்டாகக் குறிப்பிட வேண்டும். எங்கள் விஷயத்தில், இந்த நோக்கங்களுக்காக நான் ஒரு கற்பனையான பெயர்வெளி மற்றும் ஒரு எளிய முன்னொட்டைப் பயன்படுத்தினேன் " எக்ஸ்". பிறகு பண்புக்கூறைப் பயன்படுத்துதல் ஜாவா வகை, ஜாவா வகுப்பின் உண்மையான பெயரை அமைக்கவும் (இந்த வழக்கில் - javaxml2.CD) இறுதியாக, பண்புகளுடன் கூடிய குறளேசில் java2XMLCவகுப்புப்பெயர்மற்றும் xml2JavaClassName. அவர்களின் உதவியுடன், ஜாவாவிலிருந்து எக்ஸ்எம்எல் மற்றும் நேர்மாறாக மாற்றப்படும் ஒரு வகுப்பு குறிப்பிடப்பட்டுள்ளது. Apache SOAP உடன் சேர்த்து, வியக்கத்தக்க எளிமையான BeanSerializer வகுப்பைப் பயன்படுத்தினேன். உங்கள் தனிப்பயன் அளவுரு JavaBean வடிவமைப்பில் இருந்தால், இந்த சீரியலைசர் மற்றும் டீரியலைசர் உங்கள் சொந்தமாக எழுதுவதைத் தடுக்கும். உங்களுக்கு இயல்புநிலை கட்டமைப்பாளருடன் ஒரு வகுப்பு தேவை (நினைவில் கொள்ளுங்கள், CD வகுப்பிற்கு நான் ஒரு எளிய, அளவுரு இல்லாத கட்டமைப்பாளரை வரையறுத்துள்ளேன்), மேலும் இந்த வகுப்பின் அனைத்து தரவையும் முறைகளைப் பயன்படுத்தி வெளியிடவும் setXXXமற்றும் பெறவும். ஏனெனில் வர்க்கம் குறுவட்டுஇந்த தேவைகள் அனைத்தையும் முழுமையாக பூர்த்தி செய்கிறது, பீன்சீரியலைசர்சரியாக வேலை செய்கிறது.

குறிப்பு:என்ன வகுப்பு குறுவட்டுதேவைகளை பூர்த்தி செய்கிறது பீன்சீரியலைசர். பெரிய விஷயமில்லை. பெரும்பாலான வகுப்புகள் இந்த வடிவத்திற்கு எளிதாக மாற்றப்படுகின்றன. எனவே, உங்கள் சொந்த தொடர்கள் மற்றும் டீரியலைசர்கள் எழுதுவதைத் தவிர்க்குமாறு அறிவுறுத்துகிறேன். இது கூடுதல் தலைவலி (சிக்கலானது எதுவுமில்லை, ஆனால் மிகவும் கடினமானது) மேலும் உங்கள் ஆற்றலைச் சேமித்து, உங்கள் தனிப்பயன் அளவுருக்களில் பீன் மாற்றத்தைப் பயன்படுத்துமாறு பரிந்துரைக்கிறேன். பல சந்தர்ப்பங்களில், பீன் மாற்றங்களுக்கு உங்கள் வகுப்பில் இயல்புநிலை கட்டமைப்பாளர் (அளவுருக்கள் இல்லை) மட்டுமே தேவை.

இப்போது மீண்டும் உருவாக்குவோம் ஜாடிகோப்பு மற்றும் எங்கள் சேவையை மீண்டும் நிறுவவும்:

(கண்டால்ஃப்)/javaxml2/Ch12$ ஜாவா org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter xml/CDCatalogDD.xml

கவனம்:உங்கள் சர்வ்லெட் இன்ஜினை இயக்கி விட்டு, அதே நேரத்தில் ஒரு சேவையை மீண்டும் ஹோஸ்ட் செய்தால், SOAP சேவைக்கான புதிய வகுப்புகளை இயக்கவும், சேவையை மீண்டும் ஹோஸ்ட் செய்யவும், நீங்கள் சர்வ்லெட் இன்ஜினை மறுதொடக்கம் செய்ய வேண்டும்.

இப்போது எஞ்சியிருப்பது புதிய வகுப்புகள் மற்றும் முறைகளைப் பயன்படுத்துவதற்கு கிளையண்டை மாற்றுவதுதான். எடுத்துக்காட்டு 12-10 கிளையன்ட் வகுப்பின் மாற்றியமைக்கப்பட்ட பதிப்பைக் கொண்டுள்ளது CDAdder. முந்தைய பதிப்பில் செய்யப்பட்ட மாற்றங்கள் முன்னிலைப்படுத்தப்பட்டுள்ளன.

எடுத்துக்காட்டு 12-10: புதுப்பிக்கப்பட்ட CDAdder வகுப்பு

தொகுப்பு javaxml2; java.net.URL ஐ இறக்குமதி செய்க; இறக்குமதி java.util.Vector; org.apache.soap.கான்ஸ்டன்ட்ஸ் இறக்குமதி; இறக்குமதி org.apache.soap.Fault; இறக்குமதி org.apache.soap.SOAPException; இறக்குமதி org.apache.soap.encoding.SOAPMappingRegistry; இறக்குமதி org.apache.soap.encoding.soapenc.BeanSerializer;இறக்குமதி org.apache.soap.rpc.Call; இறக்குமதி org.apache.soap.rpc.Parameter; இறக்குமதி org.apache.soap.rpc.Response; இறக்குமதி org.apache.soap.util.xml.QName; பொது வகுப்பு CDAdder( பொது வெற்றிடத்தை சேர்க்க (URL url, சரம் தலைப்பு, சரம் கலைஞர், சரம் லேபிள்) SOAPException ( System.out.println("" + தலைப்பு + "" கலைஞர் "" + கலைஞர் + "" ஸ்டுடியோ " + லேபிளுடன் ஒரு சிடியைச் சேர்த்தல்); CD cd = புதிய CD(தலைப்பு, கலைஞர், லேபிள்); // ஒரு அழைப்பு பொருளை உருவாக்கவும் அழைப்பு அழைப்பு அழைப்பு = புதிய அழைப்பு (); call.setSOAPMappingRegistry(registry); call.setTargetObjectURI("urn:cd-catalog"); call.setMethodName("addCD"); call.setEncodingStyleURI(நிலைகள்.NS_URI_SOAP_ENC); // அளவுருக்களை அமைத்தல் திசையன் அளவுருக்கள் = புதிய வெக்டர்(); params.addElement(புதிய அளவுரு("cd", CD.class, cd, null)); call.setParams(params); // அழைப்பு அழைப்பு மறுமொழி பதிலைச் செயலாக்குகிறது; பதில் = call.invoke(url, ""); என்றால் (!response.generatedFault()) ( System.out.println("சிடியை வெற்றிகரமாகச் சேர்."); ) இல்லையெனில் ( Fault fault = response.getFault(); System.out.println(Error: " + fault.getFaultString ()); பொது நிலையான வெற்றிட முக்கிய(ஸ்ட்ரிங் ஆர்க்ஸ்) ( என்றால் (args.length != 4) ( System.out.println("வார்ப்புரு: java javaxml2.CDAdder " + "\"[CD தலைப்பு]\" \"[கலைஞரின் பெயர்]\ " \"[ஸ்டுடியோ சிடி]\""); முயற்சிக்கவும் (// SOAP சேவையகத்தின் URL இணைப்பு செய்யப்பட்ட URL URL = புதிய URL(args); // புதிய CD String தலைப்பு = args க்கான மதிப்புகளைப் பெறுங்கள்; சரம் கலைஞர் = args; சரம் லேபிள் = args; // CD CDAdder adder = புதிய CDAdder(); adder.add(url, தலைப்பு, கலைஞர், லேபிள்); ) கேட்ச் (விதிவிலக்கு இ) (e.printStackTrace(); ) )

வகுப்பு மேப்பிங்கில் மட்டுமே மிகவும் சுவாரஸ்யமான மாற்றம் உள்ளது குறுவட்டு:

// இந்த வகையை வரைபடமாக்குங்கள், எனவே இதை SOAP SOAPMappingRegistry பதிவேட்டில் பயன்படுத்தலாம் = புதிய SOAPMappingRegistry(); BeanSerializer serializer = புதிய BeanSerializer(); registry.mapTypes(Constants.NS_URI_SOAP_ENC, புதிய QName("urn:cd-catalog-demo", "cd"), CD.class, serializer, serializer);

இப்படித்தான் ஒரு பயனர் அளவுருவை குறியாக்கம் செய்து பிணையத்தில் அனுப்ப முடியும். வகுப்பு எப்படி என்று முன்பே சொல்லிவிட்டேன் பீன்சீரியலைசர்வகுப்பு போன்ற JavaBean வடிவத்தில் அளவுருக்களை செயலாக்க பயன்படுத்தலாம் குறுவட்டு. சேவையகத்திற்கு இவற்றைக் குறிக்க நான் ஒரு பிளேஸ்மென்ட் டிஸ்கிரிப்டரைப் பயன்படுத்தினேன், இருப்பினும் இப்போது இந்த சீரியலைசரையும் டீரியலைசரையும் பயன்படுத்துமாறு கிளையண்டிடம் சொல்ல வேண்டும். இந்த செயல்பாடு வகுப்பால் செய்யப்படுகிறது SOAPMapping Registry. முறை வரைபட வகைகள்()மறைகுறியாக்கப்பட்ட சரத்தை எடுக்கும் (மீண்டும், இதற்கு மாறிலியைப் பயன்படுத்துவது நல்லது NS_URI_SOAP_ENC), மற்றும் சிறப்பு வரிசைப்படுத்தல் பயன்படுத்தப்பட வேண்டிய அளவுரு வகை பற்றிய தகவல். QName முதலில் குறிப்பிடப்பட்டுள்ளது. இதனால்தான் ஹோஸ்டிங் டிஸ்கிரிப்டரில் விசித்திரமான பெயர்வெளி பயன்படுத்தப்பட்டது. நீங்கள் இங்கே அதே URN ஐ வழங்க வேண்டும், அதே போல் உறுப்பின் உள்ளூர் பெயரையும் (இந்த உதாரணத்திற்கு "CD"), பின்னர் Java ஆப்ஜெக்ட்டை வழங்க வேண்டும். வர்க்கம்வரிசைப்படுத்தப்படும் வகுப்பு ( CD.class) மற்றும் இறுதியாக வரிசைப்படுத்தல் மற்றும் டீரியலைசேஷன் ஆகியவற்றிற்கான வகுப்பின் ஒரு உதாரணம். இந்த உதாரணத்திற்கு, இரண்டு நிகழ்வுகளும் ஒரு உதாரணத்தை உள்ளடக்கும் பீன்சீரியலைசர். இந்த அனைத்து அமைப்புகளும் பதிவேட்டில் நுழைந்தவுடன், பொருளை அறிவிக்கவும் அழைப்புமுறையைப் பயன்படுத்தி setSOAPMapping-Registry().

முன்பு காட்டப்பட்டுள்ளபடி இந்த வகுப்பை இயக்கலாம், ஒரு குறுவட்டு சேர்க்கலாம், மேலும் அனைத்தும் எதிர்பார்த்தபடி செயல்பட வேண்டும்:

C:\javaxml2\build>java javaxml2.CDAdder http://localhost:8080/soap/servlet/rpcrouter "டோனி ரைஸ்" "மன்சானிடா" "சுகர் ஹில்"சுகர் ஹில்லின் "மன்சானிட்டா" மூலம் "டோனி ரைஸ்" என்ற தலைப்பில் ஒரு குறுந்தகட்டைச் சேர்த்தல் வெற்றிகரமாக ஒரு சிடியைச் சேர்த்தல்.

நான் வகுப்பு மாற்றத்தை விட்டுவிட்டேன் CDListerஉனக்காக. அனைத்தும் ஒரே மாதிரியின் படி தயாரிக்கப்படுகின்றன. உங்களைப் பரிசோதிக்க, எனது புத்தகத்திற்கான உதாரணக் கோப்புகளைப் பார்க்கவும், அதில் ஏற்கனவே புதுப்பிக்கப்பட்ட வகுப்புகள் உள்ளன.

குறிப்பு: வகுப்பு என்பதால் நீங்கள் முடிவு செய்யலாம் CDListerபொருளுடன் நேரடியாக தொடர்பு கொள்ளாது குறுவட்டு(முறை மூலம் திரும்பியது பட்டியல்()வகை முக்கியமானது ஹேஷ்டபிள்), நீங்கள் எந்த மாற்றமும் செய்ய வேண்டியதில்லை. இருப்பினும், திரும்பிய வகுப்பு ஹேஷ்டபிள்பொருள் நிகழ்வுகளைக் கொண்டுள்ளது குறுவட்டு. SOAP க்கு அவற்றை எவ்வாறு நீக்குவது என்று தெரியாவிட்டால், வாடிக்கையாளர் பிழையை எறிவார். இந்த வழக்கில், சிக்கலை தீர்க்க நீங்கள் பொருளில் குறிப்பிட வேண்டும் அழைப்புநகல் SOAPMapping Registry.

திறமையான பிழை கையாளுதல்

இப்போது நீங்கள் தனிப்பயன் பொருட்களைப் பார்த்து, RPC அழைப்புகளைச் செய்துள்ளீர்கள், குறைவான உற்சாகமான தலைப்பைப் பற்றி பேசுகிறேன்: பிழை கையாளுதல். எந்தவொரு நெட்வொர்க் பரிவர்த்தனையிலும், பல தோல்விகள் ஏற்படலாம். சேவை தொடங்கவில்லை, சர்வரில் பிழை உள்ளது, பொருளைக் கண்டுபிடிக்க முடியவில்லை, வகுப்புகள் இல்லை மற்றும் பல சிக்கல்கள் உள்ளன. இதுவரை நான் இந்த முறையை எளிமையாகப் பயன்படுத்தினேன் fault.getString()பிழை செய்திகளை உருவாக்க. ஆனால் இந்த முறை எப்போதும் பயனுள்ளதாக இருக்காது. அதைச் செயலில் பார்க்க, கட்டமைப்பாளரின் கருத்தைத் தெரிவிக்கவும் CDCatalog:

பொது CDCatalog() ( //பட்டியல் = புதிய ஹேஷ்டேபிள்(); // ஒரு அடைவு addCD உருவாக்கவும் (புதிய குறுவட்டு ("நிக்கல் க்ரீக்", "நிக்கல் க்ரீக்", "சுகர் ஹில்")); addCD(புதிய CD("Let it Fall", "Sean Watkins", "Sugar Hill")); addCD(புதிய குறுவட்டு("வான்வழி எல்லைகள்", "மைக்கேல் ஹெட்ஜஸ்", "விண்டாம் ஹில்")); addCD(புதிய CD("Taproot", "Michael Hedges", "Windham Hill")); )

அதை மீண்டும் தொகுத்து, சர்வ்லெட் இன்ஜினை மறுதொடக்கம் செய்து மீண்டும் ஹோஸ்ட் செய்யவும். இதனால் விதிவிலக்கு ஏற்படும் பூஜ்ய சுட்டிக்காட்டி விதிவிலக்குகிளாஸ் கன்ஸ்ட்ரக்டர் சிடியை துவக்கப்படாததில் சேர்க்க முயற்சிக்கும்போது ஹேஷ்டபிள். கிளையண்டைத் தொடங்கும் போது, ​​ஒரு பிழை செய்தி தோன்றும், ஆனால் அது மிகவும் தகவலறிந்ததாக இருக்காது:

(gandalf)/javaxml2/build$ java javaxml2.CDLister http://localhost:8080/soap/servlet/rpcrouter தற்போதைய CD கோப்பகத்தைப் பார்க்கவும். பிழை: இலக்கு பொருளைத் தீர்க்க முடியவில்லை: null

பிழையைக் கண்டறிந்து சரிசெய்வதற்கு உதவக்கூடிய தகவல் இதுவல்ல. ஆயினும்கூட, கட்டமைப்பானது பிழை கையாளுதலை சரியாகச் சமாளிக்கிறது. உனக்கு நினைவிருக்கிறதா DOMFaultListener, உறுப்பின் மதிப்பாக நீங்கள் குறிப்பிட்டுள்ளீர்கள் தவறு கேட்பவர்? அவர் விளையாட்டில் நுழையும் நேரம் வந்துவிட்டது. பிழை ஏற்பட்டால் பொருள் திரும்பியது தவறு DOM (ஆவண பொருள் மாதிரி) org.w3c.dom.Elementபிழை பற்றிய விரிவான தகவலுடன். முதலில் உங்கள் மூலக் குறியீட்டில் இறக்குமதி வெளிப்பாடுகளைச் சேர்க்கவும் java.util.Iterator:

java.net.URL ஐ இறக்குமதி செய்க; இறக்குமதி java.util.Enumeration; java.util.Hashtable இறக்குமதி; இறக்குமதி java.util.Iterator;இறக்குமதி java.util.Vector; org.apache.soap.கான்ஸ்டன்ட்ஸ் இறக்குமதி; இறக்குமதி org.apache.soap.Fault; இறக்குமதி org.apache.soap.SOAPException; இறக்குமதி org.apache.soap.encoding.SOAPMappingRegistry; இறக்குமதி org.apache.soap.encoding.soapenc.BeanSerializer; இறக்குமதி org.apache.soap.rpc.Call; இறக்குமதி org.apache.soap.rpc.Parameter; இறக்குமதி org.apache.soap.rpc.Response; இறக்குமதி org.apache.soap.util.xml.QName;

இப்போது பட்டியல்() முறையில் பிழைகளைக் கையாள மாற்றங்களைச் செய்வோம்:

என்றால் (!response.generatedFault()) ( Parameter returnValue = response.getReturnValue(); Hashtable catalog = (Hashtable)returnValue.getValue(); கணக்கீடு e = catalog.keys(); போது (e.hasMoreElements()) (சரம் தலைப்பு = (சரம்)e.nextElement (); (CD)catalog.get(title); + " ஸ்டுடியோக்கள் " + cd.getLabel() ) வேறு ( தவறு = response.getFault(); System.out.println("Error:" + fault.getFaultString()); திசையன் உள்ளீடுகள் = fault.getDetailEntries(); (Iterator i = entries.iterator(); i.hasNext();) (org.w3c.dom.Element entry = (org.w3c.dom.Element)i.next(); System.out.println(entry .getFirstChild().getNodeValue());

முறையைப் பயன்படுத்துதல் getDetailEntries() SOAP சேவை மற்றும் சிக்கலை ஆதரிக்கும் மூல தரவு சேவையகத்திற்கான அணுகலைப் பெறுவீர்கள். குறியீடு அவற்றை மீண்டும் செயலாக்குகிறது (வழக்கமாக ஒரே ஒரு உறுப்பு மட்டுமே உள்ளது, ஆனால் அதற்கு நெருக்கமான கவனம் தேவை) மற்றும் DOM ஐ இடைமறிக்கும் உறுப்பு, ஒவ்வொரு பதிவிலும் உள்ளது. முக்கியமாக, நீங்கள் பணிபுரியும் XML இதோ:

SOAP-ENV:Server.BadTargetObjectURI இலக்கை தீர்க்க முடியாது: பூஜ்ய இதைத்தான் நாங்கள் விரும்புகிறோம்!

வேறு வார்த்தைகளில் கூறுவதானால், பிழைகள் உள்ள SOAP உறையின் பகுதிக்கான அணுகலை ஃபால்ட் ஆப்ஜெக்ட் வழங்குகிறது. கூடுதலாக, Apache SOAP ஆனது பிழைகள் ஏற்படும் போது ஜாவா ஸ்டேக் ட்ரேஸை வழங்குகிறது, அவற்றை சரிசெய்ய தேவையான விரிவான தகவலை வழங்குகிறது. ஒரு உறுப்பை இடைமறித்தல் ஸ்டாக்ட்ரேஸ்மற்றும் முனை மதிப்பை அச்சிடுகிறது உரைஇந்த உறுப்பிலிருந்து உங்கள் கிளையன்ட் சர்வர் ஸ்டாக் ட்ரேஸை அச்சிட முடியும். இந்த மாற்றங்களைத் தொகுத்து, கிளையண்டை மறுதொடக்கம் செய்வதன் மூலம் பின்வரும் முடிவைப் பெறுவீர்கள்:

C:\javaxml2\build>java javaxml2.CDLister http://localhost:8080/soap/servlet/rpcr outer தற்போதைய CD கோப்பகத்தைப் பார்க்கவும். பிழை: இலக்கைத் தீர்க்க முடியாது: null java.lang.NullPointerException in javaxml2.CDCatalog.addCD(CDCatalog.java:24) in javaxml2.CDCatalog. (CDCatalog.java:14) java.lang.Class.newInstance0(நேட்டிவ் முறை) in java.lang.Class.newInstance(Class.java:237)

இது மிகவும் சிறப்பாக இல்லை, ஆனால் குறைந்தபட்சம் விதிவிலக்கு ஏற்பட்ட சில தகவல்களை நீங்கள் பார்க்கலாம் பூஜ்ய சுட்டிக்காட்டி விதிவிலக்குமேலும் இந்தச் சிக்கல் ஏற்பட்ட சர்வர் வகுப்புகளில் உள்ள வரி எண்களைக் கண்டறியவும். இந்த சமீபத்திய மாற்றங்களின் முடிவு, பிழை கையாளும் சிக்கலைப் பற்றிய தெளிவான படத்தை உங்களுக்கு வழங்கியுள்ளது. இப்போது உங்கள் சர்வர் வகுப்புகளில் பிழைகள் இருக்கிறதா என்று பார்க்க வேண்டும். ஆம், நான் கிட்டத்தட்ட மறந்துவிட்டேன், அதற்கு முன் உங்கள் வகுப்பை மாற்ற மறக்காதீர்கள் CDCatalogதெளிவுக்காக நாங்கள் வேண்டுமென்றே அறிமுகப்படுத்திய பிழைகளிலிருந்து விடுபட!

  1. SMTP (அல்லது ஜாபர் கூட) போன்ற பிற நெறிமுறைகளில் SOAP ஐ இயக்குவது பற்றி நிறைய பேச்சு உள்ளது. SOAP தரநிலை தற்போது இதை வழங்கவில்லை, ஆனால் எதிர்காலத்தில் இதே போன்ற திறன்கள் சேர்க்கப்படலாம். எனவே, இந்த தலைப்பில் செயலில் விவாதங்களை நீங்கள் சந்தித்தால் ஆச்சரியப்பட வேண்டாம்.
  • பயிற்சி

அனைவருக்கும் வணக்கம்!
சமீபத்தில் நான் வலை சேவைகளை உருவாக்கத் தொடங்கினேன். ஆனால் இன்று தலைப்பு என்னைப் பற்றியது அல்ல, ஆனால் SOAP 1.2 நெறிமுறையின் அடிப்படையில் எங்கள் சொந்த XML வலை சேவையை எவ்வாறு எழுதுவது என்பது பற்றியது.

தலைப்பைப் படித்த பிறகு உங்களால் முடியும் என்று நம்புகிறேன்:

  • இணைய பயன்பாட்டின் உங்கள் சொந்த சேவையக செயலாக்கத்தை எழுதுங்கள்;
  • வலை பயன்பாட்டின் உங்கள் சொந்த கிளையன்ட் செயலாக்கத்தை எழுதுங்கள்;
  • உங்கள் சொந்த இணைய சேவை விளக்கத்தை (WSDL) எழுதுங்கள்;
  • சேவையகத்திற்கு ஒரே வகையான தரவின் கிளையன்ட் வரிசைகளை அனுப்பவும்.
நீங்கள் யூகித்தபடி, அனைத்து மேஜிக்களும் PHP மற்றும் உள்ளமைக்கப்பட்ட SoapClient மற்றும் SoapServer வகுப்புகளைப் பயன்படுத்தி செய்யப்படும். எஸ்எம்எஸ் செய்திகளை அனுப்பும் சேவையாக எங்கள் முயல் இருக்கும்.

1 பிரச்சனை அறிக்கை

1.1 எல்லைகள்

ஆரம்பத்தில், தலைப்பின் முடிவில் நாம் அடையக்கூடிய முடிவைச் சமாளிக்க நான் முன்மொழிகிறேன். மேலே அறிவித்தபடி, SMS செய்திகளை அனுப்புவதற்கான சேவையை நாங்கள் எழுதுவோம், மேலும் துல்லியமாக, SOAP நெறிமுறை மூலம் வெவ்வேறு மூலங்களிலிருந்து செய்திகளைப் பெறுவோம். அதன் பிறகு, அவை எந்த வடிவத்தில் சேவையகத்திற்கு வருகின்றன என்பதை நாங்கள் கருத்தில் கொள்வோம். துரதிர்ஷ்டவசமாக, பல காரணங்களுக்காக இந்த இடுகையின் எல்லைக்கு அப்பாற்பட்டது.

1.2 எந்தத் தரவை மாற்றுவோம்?

அருமை, நாங்கள் எல்லைகளை முடிவு செய்துள்ளோம்! சர்வருக்கும் கிளையண்டிற்கும் இடையில் என்ன தரவை பரிமாறிக்கொள்வோம் என்பதை முடிவு செய்வதே அடுத்த படியாக எடுக்கப்பட வேண்டும். இந்த தலைப்பில், முடிகளை அதிக நேரம் பிரிக்க வேண்டாம் என்று நான் பரிந்துரைக்கிறேன், மேலும் உங்களுக்கான முக்கிய கேள்விகளுக்கு உடனடியாக பதிலளிக்கவும்:
  • ஒரு சந்தாதாரருக்கு SMS செய்தியை அனுப்ப, சேவையகத்திற்கு என்ன குறைந்தபட்ச தரவு அனுப்பப்பட வேண்டும்?
  • வாடிக்கையாளரின் தேவைகளைப் பூர்த்தி செய்ய சேவையகத்திலிருந்து குறைந்தபட்சம் என்ன தரவு அனுப்பப்பட வேண்டும்?
இதற்கு நீங்கள் பின்வருவனவற்றை அனுப்ப வேண்டும் என்று ஏதோ சொல்கிறது:
  • மொபைல் போன் எண் மற்றும்
  • SMS செய்தியின் உரை.
கொள்கையளவில், இந்த இரண்டு குணாதிசயங்களும் அனுப்ப போதுமானவை, ஆனால் பிறந்தநாள் வாழ்த்துக்களுடன் கூடிய எஸ்எம்எஸ் வழக்கை அதிகாலை 3 மணிக்கு அல்லது 4 மணிக்கு உங்களுக்கு வரும் என்று நான் உடனடியாக கற்பனை செய்கிறேன்! இந்த நேரத்தில், என்னைப் பற்றி மறக்காத அனைவருக்கும் நான் மிகவும் நன்றியுள்ளவனாக இருப்பேன்! எனவே, நாங்கள் சேவையகத்திற்கும் அனுப்புவோம்
  • SMS செய்தியை அனுப்பும் தேதி.
நான் சேவையகத்திற்கு அனுப்ப விரும்பும் அடுத்த விஷயம்:
  • செய்தி வகை.
இந்த அளவுரு கட்டாயமில்லை, ஆனால் எங்கள் செய்திகளில் எத்தனை வாடிக்கையாளர்களை நாங்கள் "மகிழ்ச்சியடைந்தோம்" என்பதை முதலாளியிடம் விரைவாகச் சொல்ல வேண்டுமானால் அது எங்களுக்கு மிகவும் பயனுள்ளதாக இருக்கும், மேலும் இந்த விஷயத்தில் சில அழகான புள்ளிவிவரங்களையும் வரையவும்.

இன்னும், நான் ஒன்றை மறந்துவிட்டேன்! நாம் இன்னும் கொஞ்சம் பிரதிபலித்தால், வாடிக்கையாளர் ஒரு நேரத்தில் ஒரு எஸ்எம்எஸ் செய்தியை அல்லது அவற்றில் பலவற்றை சேவையகத்திற்கு அனுப்ப முடியும் என்பது கவனிக்கத்தக்கது. வேறு வார்த்தைகளில் கூறுவதானால், ஒரு தரவு பாக்கெட்டில் ஒன்று முதல் முடிவிலி செய்திகள் வரை இருக்கலாம்.

இதன் விளைவாக, SMS செய்தியை அனுப்ப, பின்வரும் தரவு நமக்குத் தேவைப்படும்:

  • அலைபேசி எண்,
  • SMS செய்தி உரை,
  • சந்தாதாரருக்கு SMS செய்தியை அனுப்பும் நேரம்,
  • செய்தி வகை.

முதல் கேள்விக்கு பதில் சொல்லிவிட்டோம், இப்போது இரண்டாவது கேள்விக்கு பதில் சொல்ல வேண்டும். ஒருவேளை நான் கொஞ்சம் குழப்பமடைய அனுமதிப்பேன். எனவே, சேவையகத்திலிருந்து பூலியன் தரவை மட்டுமே அனுப்புவோம், இதன் பொருள் பின்வரும் பொருளைக் கொண்டுள்ளது:

  • உண்மை - பாக்கெட் வெற்றிகரமாக சர்வரை அடைந்தது, அங்கீகாரத்தை நிறைவேற்றியது மற்றும் SMS வழங்குநருக்கு அனுப்ப வரிசையில் உள்ளது
  • தவறு - மற்ற எல்லா நிகழ்வுகளிலும்

இது சிக்கல் அறிக்கையின் விளக்கத்தை நிறைவு செய்கிறது! இறுதியாக, வேடிக்கையான பகுதிக்கு வருவோம் - இந்த சோப் என்ன வகையான விசித்திரமான மிருகம் என்பதைக் கண்டுபிடிப்போம்!

2 சோப் என்றால் என்ன?

பொதுவாக, ஆரம்பத்தில் நான் SOAP என்றால் என்ன என்பதைப் பற்றி எதையும் எழுதத் திட்டமிடவில்லை, மேலும் தேவையான விவரக்குறிப்புகள் மற்றும் விக்கிபீடியாவிற்கான இணைப்புகளுடன் w3.org வலைத்தளத்திற்கான இணைப்புகளுக்கு என்னை மட்டுப்படுத்த விரும்பினேன். ஆனால் இறுதியில் இந்த நெறிமுறை பற்றி ஒரு சிறு குறிப்பை எழுத முடிவு செய்தேன்.

இந்த தரவு பரிமாற்ற நெறிமுறை RPC (ரிமோட் ப்ரோசீசர் கால்) முன்னுதாரணத்தின் அடிப்படையிலான நெறிமுறைகளின் துணைக்குழுவைச் சேர்ந்தது என்ற உண்மையுடன் எனது கதையைத் தொடங்குவேன், இதன் எதிர்முனையானது REST (பிரதிநிதித்துவ மாநில பரிமாற்றம்) ஆகும். கட்டுரைகளுக்கான இணைப்புகள் தலைப்பின் முடிவில் இருக்கும் விக்கிபீடியாவில் இதைப் பற்றி மேலும் படிக்கலாம். இந்தக் கட்டுரைகளில் இருந்து, நாம் பின்வருவனவற்றைப் புரிந்து கொள்ள வேண்டும்: “RPC அணுகுமுறையானது அதிக எண்ணிக்கையிலான முறைகள் மற்றும் சிக்கலான நெறிமுறையுடன் குறைந்த எண்ணிக்கையிலான பிணைய வளங்களைப் பயன்படுத்த அனுமதிக்கிறது. REST அணுகுமுறையுடன், முறைகளின் எண்ணிக்கை மற்றும் நெறிமுறை சிக்கலானது கண்டிப்பாக வரையறுக்கப்பட்டுள்ளது, அதாவது தனிப்பட்ட வளங்களின் எண்ணிக்கை பெரியதாக இருக்கலாம். அதாவது, எங்களைப் பொறுத்தவரை, தளத்தில் RPC அணுகுமுறையைப் பொறுத்தவரை, சேவைக்கு எப்போதும் ஒரு உள்ளீடு (இணைப்பு) இருக்கும் மற்றும் உள்வரும் தரவை செயலாக்க எந்த செயல்முறையை அழைக்க வேண்டும், அதே நேரத்தில் தரவுடன் நாங்கள் பரிமாற்றுகிறோம். எங்கள் தளத்தில் REST அணுகுமுறையுடன் பல உள்ளீடுகள் (இணைப்புகள்) உள்ளன, அவை ஒவ்வொன்றும் குறிப்பிட்ட தரவை மட்டுமே ஏற்றுக்கொண்டு செயலாக்குகிறது. இந்த அணுகுமுறைகளில் உள்ள வேறுபாட்டை இன்னும் எளிமையாக விளக்குவது எப்படி என்று படிக்கும் எவருக்கும் தெரிந்தால், கருத்துகளில் எழுத மறக்காதீர்கள்!

SOAP பற்றி நாம் தெரிந்து கொள்ள வேண்டிய அடுத்த விஷயம் என்னவென்றால், இந்த நெறிமுறை அதே XML ஐ போக்குவரமாகப் பயன்படுத்துகிறது, இது ஒருபுறம் மிகவும் நல்லது, ஏனென்றால் எங்கள் ஆயுதக் களஞ்சியத்தில் உடனடியாக இந்த மார்க்அப் மொழியின் அடிப்படையிலான தொழில்நுட்பங்களின் முழு சக்தியும் அடங்கும், அதாவது XML-Schema - XML ​​ஆவணத்தின் கட்டமைப்பை விவரிக்கும் ஒரு மொழி (நன்றி விக்கிபீடியா!), இது சேவையகத்தால் பெறப்பட்ட தரவை தானாக சரிபார்ப்பதற்கு அனுமதிக்கிறது. வாடிக்கையாளர்களிடமிருந்து.

எனவே, SOAP என்பது தொலைநிலை நடைமுறை அழைப்புகளைச் செயல்படுத்தப் பயன்படுத்தப்படும் ஒரு நெறிமுறை என்பதை இப்போது நாம் அறிவோம், மேலும் இது XML ஐப் போக்குவரமாகப் பயன்படுத்துகிறது! நீங்கள் விக்கிபீடியாவில் உள்ள கட்டுரையைப் படித்தால், அது HTTP உடன் மட்டும் அல்லாமல், எந்த பயன்பாட்டு நிலை நெறிமுறையிலும் பயன்படுத்தப்படலாம் என்பதை நீங்கள் அங்கிருந்து அறிந்து கொள்ளலாம் (துரதிர்ஷ்டவசமாக, இந்த தலைப்பில் HTTP-க்கு மேல் SOAP ஐ மட்டுமே கருத்தில் கொள்வோம்). இதிலெல்லாம் எனக்கு மிகவும் பிடித்தது எது தெரியுமா? யூகங்கள் இல்லை என்றால், நான் ஒரு குறிப்பைத் தருகிறேன் - SOAP!... இன்னும் யூகங்கள் இல்லையா?... விக்கிபீடியாவில் உள்ள கட்டுரையை நீங்கள் நிச்சயமாகப் படிக்கிறீர்களா?... பொதுவாக, நான் உங்களை மேலும் சித்திரவதை செய்ய மாட்டேன். எனவே, நான் நேரடியாக பதிலுக்குச் செல்கிறேன்: “SOAP (ஆங்கில எளிய பொருள் அணுகல் நெறிமுறையிலிருந்து - எளிமையானது. நெறிமுறைபொருள்களுக்கான அணுகல்; விவரக்குறிப்பு 1.2 வரை)". இந்த வரியில் மிகவும் குறிப்பிடத்தக்க விஷயம் சாய்வு! இவை அனைத்திலிருந்தும் நீங்கள் என்ன முடிவுகளை எடுத்தீர்கள் என்று எனக்குத் தெரியவில்லை, ஆனால் பின்வருவனவற்றை நான் காண்கிறேன் - இந்த நெறிமுறையை எந்த வகையிலும் "எளிமையானது" என்று அழைக்க முடியாது (மற்றும் வெளிப்படையாக w3 கூட இதை ஒப்புக்கொள்கிறது), பின்னர் பதிப்பு 1.2 இலிருந்து அது எப்படியாவது மறைகுறியாக்கப்படுவதை நிறுத்தியது. ! அது SOAP, வெறும் SOAP, காலம் என அறியப்பட்டது.

சரி, என்னை மன்னிக்கவும், நான் கொஞ்சம் விலகிவிட்டேன். நான் முன்பு எழுதியது போல, எக்ஸ்எம்எல் போக்குவரமாகப் பயன்படுத்தப்படுகிறது, மேலும் கிளையன்ட் மற்றும் சர்வர் இடையே பயணிக்கும் பாக்கெட்டுகள் SOAP உறைகள் என்று அழைக்கப்படுகின்றன. உறையின் பொதுவான அமைப்பை நீங்கள் கருத்தில் கொண்டால், அது உங்களுக்கு மிகவும் பரிச்சயமானதாகத் தோன்றும், ஏனென்றால்... HTML பக்கத்தின் கட்டமைப்பை ஒத்திருக்கிறது. இது ஒரு முக்கிய பகுதியைக் கொண்டுள்ளது - உறை, இதில் பிரிவுகள் அடங்கும் தலைப்புமற்றும் உடல், அல்லது தவறு. IN உடல்தரவு அனுப்பப்படுகிறது மற்றும் இது உறையின் கட்டாயப் பகுதியாகும் தலைப்புவிருப்பமானது. IN தலைப்புஅங்கீகாரம் அல்லது இணைய சேவை நடைமுறைகளின் உள்ளீட்டுத் தரவுகளுடன் நேரடியாக தொடர்பில்லாத வேறு ஏதேனும் தரவு அனுப்பப்படலாம். பற்றி தவறுஏதேனும் பிழைகள் ஏற்பட்டால் சேவையகத்திலிருந்து கிளையண்டிற்கு வரும் என்பதைத் தவிர, சிறப்புச் சொல்ல எதுவும் இல்லை.

SOAP நெறிமுறை பற்றிய எனது மறுஆய்வுக் கதை இங்குதான் முடிவடைகிறது (எங்கள் கிளையண்ட் மற்றும் சர்வர் இறுதியாக அவற்றை இயக்கக் கற்றுக் கொள்ளும்போது உறைகளையும் அவற்றின் கட்டமைப்பையும் இன்னும் விரிவாகப் பார்ப்போம்) மேலும் புதியது தொடங்கும் - SOAP துணையைப் பற்றி WSDL(இணைய சேவைகள் விளக்கம் மொழி). ஆம், ஆம், இந்த நெறிமுறையில் எங்கள் API ஐ செயல்படுத்த முயற்சிப்பதில் இருந்து நம்மில் பெரும்பாலோர் பயமுறுத்துவது இதுதான். இதன் விளைவாக, நாங்கள் வழக்கமாக எங்கள் சக்கரத்தை போக்குவரத்துக்காக JSON உடன் மீண்டும் கண்டுபிடிப்போம். WSDL என்றால் என்ன? WSDL என்பது XML மொழி (c) விக்கிப்பீடியாவின் அடிப்படையில் இணைய சேவைகளை விவரிப்பதற்கும் அவற்றை அணுகுவதற்குமான ஒரு மொழியாகும். இந்த தொழில்நுட்பத்தின் முழு புனிதமான அர்த்தத்தையும் இந்த வரையறை உங்களுக்கு தெளிவுபடுத்தவில்லை என்றால், அதை என் சொந்த வார்த்தைகளில் விவரிக்க முயற்சிப்பேன்!

WSDL ஆனது எங்கள் வாடிக்கையாளர்களை சர்வருடன் சாதாரணமாக தொடர்பு கொள்ள அனுமதிக்கும் வகையில் வடிவமைக்கப்பட்டுள்ளது. இதைச் செய்ய, "*.wsdl" நீட்டிப்புடன் கூடிய கோப்பு பின்வரும் தகவலை விவரிக்கிறது:

  • என்ன பெயர்வெளிகள் பயன்படுத்தப்பட்டன?
  • என்ன தரவுத் திட்டங்கள் பயன்படுத்தப்பட்டன?
  • வாடிக்கையாளர்களிடமிருந்து இணைய சேவை எந்த வகையான செய்திகளை எதிர்பார்க்கிறது?
  • எந்த தரவு எந்த இணைய சேவை நடைமுறைகளுக்கு சொந்தமானது,
  • இணைய சேவையில் என்ன நடைமுறைகள் உள்ளன?
  • வாடிக்கையாளர் இணைய சேவை நடைமுறைகளை எவ்வாறு அழைக்க வேண்டும்,
  • வாடிக்கையாளர் அழைப்புகளை எந்த முகவரிக்கு அனுப்ப வேண்டும்?
நீங்கள் பார்க்க முடியும் என, இந்த கோப்பு முழு இணைய சேவையாகும். கிளையண்டில் உள்ள WSDL கோப்பின் முகவரியைக் குறிப்பிடுவதன் மூலம், எந்தவொரு இணைய சேவையையும் பற்றிய அனைத்தையும் நாங்கள் அறிவோம்! இதன் விளைவாக, இணைய சேவை எங்குள்ளது என்பது பற்றி நாம் எதுவும் தெரிந்து கொள்ள வேண்டிய அவசியமில்லை. நீங்கள் தெரிந்து கொள்ள வேண்டியது அதன் WSDL கோப்பின் இருப்பிடம் மட்டுமே! ரஷ்ய பழமொழிகள் கூறுவது போல் SOAP பயங்கரமானது அல்ல என்பதை விரைவில் கண்டுபிடிப்போம்.

3 எக்ஸ்எம்எல்-ஸ்கீமா அறிமுகம்

SOAP என்றால் என்ன, அதன் உள்ளே என்ன இருக்கிறது, அதைச் சுற்றியுள்ள தொழில்நுட்ப அடுக்கைப் பற்றிய கண்ணோட்டம் இப்போது நமக்குத் தெரியும். முதலாவதாக, SOAP என்பது கிளையன்ட் மற்றும் சர்வருக்கு இடையேயான தொடர்புக்கான ஒரு முறையாகும், மேலும் XML மார்க்அப் மொழி அதற்கான போக்குவரமாகப் பயன்படுத்தப்படுகிறது, XML ஸ்கீமாக்களைப் பயன்படுத்தி தானியங்கு தரவு சரிபார்ப்பு எவ்வாறு நிகழ்கிறது என்பதைப் பற்றி இந்தப் பகுதியில் கொஞ்சம் புரிந்துகொள்வோம்.

வரைபடத்தின் முக்கிய பணி, நாம் செயலாக்கப் போகும் தரவின் கட்டமைப்பை விவரிப்பதாகும். எக்ஸ்எம்எல் திட்டங்களில் உள்ள அனைத்து தரவும் பிரிக்கப்பட்டுள்ளது எளிய(ஸ்கேலர்) மற்றும் சிக்கலான(கட்டமைப்புகள்) வகைகள். எளிய வகைகளில் பின்வரும் வகைகள் அடங்கும்:

  • வரி,
  • எண்,
  • பூலியன் மதிப்பு,
  • நாளில்.
உள்ளே நீட்டிப்புகள் இல்லாத மிக எளிமையான ஒன்று. அவற்றின் ஆன்டிபோட் சிக்கலான சிக்கலான வகைகள். ஒவ்வொருவரின் மனதில் வரும் சிக்கலான வகையின் எளிய உதாரணம் பொருள்கள். உதாரணமாக, ஒரு புத்தகம். புத்தகம் பண்புகளைக் கொண்டுள்ளது: நூலாசிரியர், பெயர், விலை, ISBN எண்முதலியன இந்த பண்புகள், இதையொட்டி, எளிய வகைகளாகவோ அல்லது சிக்கலானதாகவோ இருக்கலாம். இதை விவரிப்பதே எக்ஸ்எம்எல் ஸ்கீமாவின் பணியாகும்.

எங்கள் எஸ்எம்எஸ் செய்திக்கு வெகுதூரம் சென்று எக்ஸ்எம்எல் ஸ்கீமாவை எழுத வேண்டாம் என்று நான் பரிந்துரைக்கிறேன்! SMS செய்தியின் xml விளக்கம் கீழே உள்ளது:

71239876543 சோதனை செய்தி 2013-07-20T12:00:00 12
எங்கள் சிக்கலான வகை வரைபடம் இப்படி இருக்கும்:


இந்த பதிவு பின்வருமாறு கூறுகிறது: எங்களிடம் ஒரு மாறி உள்ளது " செய்தி"வகை" செய்தி"மற்றும் ஒரு சிக்கலான வகை உள்ளது" செய்தி", இது ஒரு வரிசையான கூறுகளைக் கொண்டுள்ளது" தொலைபேசி"வகை லேசான கயிறு, « உரை"வகை லேசான கயிறு, « தேதி"வகை தேதி நேரம், « வகை"வகை தசம. இந்த வகைகள் எளிமையானவை மற்றும் ஏற்கனவே திட்ட விளக்கத்தில் வரையறுக்கப்பட்டுள்ளன. வாழ்த்துகள்! எங்களின் முதல் எக்ஸ்எம்எல் ஸ்கீமாவை இப்போதுதான் எழுதினோம்!

உறுப்புகளின் பொருள் என்று நான் நினைக்கிறேன் " உறுப்பு"மற்றும்" சிக்கலான வகை"எல்லாம் உங்களுக்கு அதிகமாகவோ அல்லது குறைவாகவோ தெளிவாகிவிட்டது, எனவே நாங்கள் அவற்றில் கவனம் செலுத்த மாட்டோம், மேலும் இசையமைப்பாளர் உறுப்புக்கு நேராக மாறுவோம்" வரிசை" நாம் இசையமைப்பாளர் உறுப்பைப் பயன்படுத்தும் போது " வரிசை"அதில் சேர்க்கப்பட்டுள்ள கூறுகள் எப்போதும் வரைபடத்தில் குறிப்பிடப்பட்ட வரிசையில் அமைந்திருக்க வேண்டும், மேலும் அவை அனைத்தும் கட்டாயமாகும் என்பதை நாங்கள் உங்களுக்குத் தெரிவிக்கிறோம். ஆனால் விரக்தியடைய வேண்டாம்! எக்ஸ்எம்எல் திட்டங்களில் மேலும் இரண்டு இசையமைப்பாளர் கூறுகள் உள்ளன: " தேர்வு"மற்றும்" அனைத்து" இசையமைப்பாளர்" தேர்வு"அதில் பட்டியலிடப்பட்ட உறுப்புகளில் ஒன்று இருக்க வேண்டும் என்று அறிவிக்கிறது, மற்றும் இசையமைப்பாளர்" அனைத்து» - பட்டியலிடப்பட்ட கூறுகளின் எந்த கலவையும்.

நீங்கள் நினைவில் வைத்துள்ளபடி, தலைப்பின் முதல் பிரிவில், ஒன்றிலிருந்து முடிவிலி வரை SMS செய்திகளை ஒரு தொகுப்பில் அனுப்ப முடியும் என்பதை நாங்கள் ஒப்புக்கொண்டோம். எனவே, எக்ஸ்எம்எல் ஸ்கீமாவில் அத்தகைய தரவு எவ்வாறு அறிவிக்கப்படுகிறது என்பதைப் புரிந்துகொள்ள நான் முன்மொழிகிறேன். பொது தொகுப்பு அமைப்பு இப்படி இருக்கலாம்:

71239876543 சோதனை செய்தி 1 2013-07-20T12:00:00 12 71239876543 சோதனை செய்தி என் 2013-07-20T12:00:00 12
அத்தகைய சிக்கலான வகைக்கான வரைபடம் இப்படி இருக்கும்:


முதல் தொகுதியில் சிக்கலான வகையின் பழக்கமான அறிவிப்பு உள்ளது " செய்தி" நீங்கள் கவனித்திருந்தால், ஒவ்வொரு எளிய வகையிலும் சேர்க்கப்பட்டுள்ளது " செய்தி", புதிய தெளிவுபடுத்தும் பண்புக்கூறுகள் சேர்க்கப்பட்டுள்ளன " நிகழும்"மற்றும்" அதிகபட்சம் ஏற்படுகிறது" பெயரிலிருந்து நீங்கள் யூகித்தபடி, முதல் ( நிகழும்) இந்த வரிசையில் குறைந்தபட்சம் ஒரு வகை உறுப்பு இருக்க வேண்டும் என்பதைக் குறிக்கிறது " தொலைபேசி», « உரை», « தேதி"மற்றும்" வகை", அடுத்தது போது ( அதிகபட்சம் ஏற்படுகிறது) பண்புக்கூறு நமது வரிசையில் அதிகபட்சம் அத்தகைய ஒரு உறுப்பு இருப்பதாக நமக்கு அறிவிக்கிறது. இதன் விளைவாக, எந்தவொரு தரவிற்கும் எங்கள் சொந்த ஸ்கீமாக்களை எழுதும் போது, ​​அவற்றை எவ்வாறு கட்டமைப்பது என்பதில் எங்களுக்கு பரந்த தேர்வு வழங்கப்படுகிறது!

வரைபடத்தின் இரண்டாவது தொகுதி உறுப்பை அறிவிக்கிறது " செய்தி பட்டியல்"வகை" செய்தி பட்டியல்" என்பது தெளிவாகிறது" செய்தி பட்டியல்"குறைந்தது ஒரு உறுப்பு கொண்டிருக்கும் ஒரு சிக்கலான வகை" செய்தி", ஆனால் அத்தகைய உறுப்புகளின் அதிகபட்ச எண்ணிக்கை குறைவாக இல்லை!

4 உங்கள் WSDL ஐ எழுதுங்கள்

WSDL என்பது எங்கள் இணைய சேவை என்பது உங்களுக்கு நினைவிருக்கிறதா? உங்களுக்கு நினைவிருக்கும் என்று நம்புகிறேன்! நாம் அதை எழுதும் போது, ​​நமது சிறிய இணைய சேவை அதில் இயங்கும். எனவே, குழப்பமடைய வேண்டாம் என்று நான் பரிந்துரைக்கிறேன்.

பொதுவாக, எல்லாமே நமக்குச் சரியாக வேலை செய்ய, சரியான MIME வகை கொண்ட WSDL கோப்பை கிளையண்டிற்கு மாற்ற வேண்டும். இதைச் செய்ய, உங்கள் இணைய சேவையகத்தை அதற்கேற்ப உள்ளமைக்க வேண்டும், அதாவது, "*.wsdl" நீட்டிப்புடன் கோப்புகளுக்கான MIME வகையை பின்வரும் வரியில் அமைக்கவும்:

பயன்பாடு/wsdl+xml
ஆனால் நடைமுறையில், நான் வழக்கமாக HTTP தலைப்பை PHP வழியாக அனுப்பினேன். உரை/எக்ஸ்எம்எல்»:

தலைப்பு("உள்ளடக்கம்-வகை: உரை/xml; charset=utf-8");
மற்றும் எல்லாம் நன்றாக வேலை செய்தது!

எங்களின் எளிய இணையச் சேவையானது மிகவும் சுவாரசியமான விளக்கத்தைக் கொண்டிருக்கும் என்று நான் இப்போதே உங்களுக்கு எச்சரிக்க விரும்புகிறேன், எனவே பயப்பட வேண்டாம், ஏனெனில்... உரையின் பெரும்பகுதி கட்டாய நீர் மற்றும், அதை ஒரு முறை எழுதியிருந்தால், நீங்கள் அதை ஒரு இணைய சேவையிலிருந்து மற்றொரு இணைய சேவைக்கு தொடர்ந்து நகலெடுக்கலாம்!

WSDL XML என்பதால், இதைப் பற்றி நேரடியாக முதல் வரியிலேயே எழுத வேண்டும். கோப்பின் மூல உறுப்பு எப்போதும் பெயரிடப்பட வேண்டும் " வரையறைகள்»:


பொதுவாக, WSDL 4-5 முக்கிய தொகுதிகளைக் கொண்டுள்ளது. முதல் தொகுதி என்பது ஒரு வலை சேவையின் வரையறை அல்லது வேறுவிதமாகக் கூறினால், நுழைவு புள்ளி.


எங்களிடம் ஒரு சேவை உள்ளது என்று இங்கே கூறுகிறது - " எஸ்எம்எஸ் சேவை" கொள்கையளவில், WSDL கோப்பில் உள்ள அனைத்து பெயர்களையும் நீங்கள் விரும்பியபடி மாற்றலாம், ஏனெனில் அவர்கள் முற்றிலும் எந்த பாத்திரத்தையும் வகிக்கவில்லை.

இதற்குப் பிறகு நாங்கள் எங்கள் இணைய சேவையில் அறிவிக்கிறோம் " எஸ்எம்எஸ் சேவை"" என்று அழைக்கப்படும் ஒரு நுழைவு புள்ளி ("போர்ட்") உள்ளது எஸ்எம்எஸ் சர்வீஸ் போர்ட்" இந்த நுழைவுப் புள்ளியில்தான் வாடிக்கையாளர்களிடமிருந்து அனைத்து கோரிக்கைகளும் சேவையகத்திற்கு அனுப்பப்படும். மேலும் "உறுப்பில் குறிக்கவும் முகவரி» கோரிக்கைகளை ஏற்கும் ஹேண்ட்லர் கோப்பிற்கான இணைப்பு.

இணையச் சேவையை வரையறுத்து, அதற்கான நுழைவுப் புள்ளியைக் குறிப்பிட்டதும், அதற்கு நாம் ஆதரிக்கும் நடைமுறைகளை இணைக்க வேண்டும்:


இதைச் செய்ய, எந்த செயல்பாடுகள் மற்றும் அவை எந்த வடிவத்தில் அழைக்கப்படும் என்பதை இது பட்டியலிடுகிறது. அந்த. துறைமுகத்திற்கு" எஸ்எம்எஸ் சர்வீஸ் போர்ட்"ஒரு பிணைப்பு பெயரின் கீழ் வரையறுக்கப்படுகிறது" SmsServiceBinding", இதில் அழைப்பு வகை உள்ளது" ஆர்.பி.சி"மற்றும் HTTP பரிமாற்ற நெறிமுறையாகப் பயன்படுத்தப்படுகிறது. எனவே, நாங்கள் HTTP மூலம் RPC அழைப்பைச் செய்வோம் என்று இங்கு சுட்டிக்காட்டினோம். இதற்குப் பிறகு நாம் எந்த நடைமுறைகளை விவரிக்கிறோம் ( அறுவை சிகிச்சை) இணைய சேவையில் துணைபுரிகிறது. நாங்கள் ஒரே ஒரு நடைமுறையை மட்டுமே ஆதரிப்போம் - " எஸ்எம்எஸ் அனுப்பவும்" இந்த நடைமுறை மூலம் எங்கள் அற்புதமான செய்திகள் சர்வருக்கு அனுப்பப்படும்! செயல்முறை அறிவிக்கப்பட்ட பிறகு, தரவு எந்த வடிவத்தில் அனுப்பப்படும் என்பதைக் குறிப்பிடுவது அவசியம். இந்த வழக்கில், நிலையான SOAP உறைகள் பயன்படுத்தப்படும் என்று சுட்டிக்காட்டப்படுகிறது.

அதன் பிறகு, செயல்முறையை செய்திகளுடன் இணைக்க வேண்டும்:


இதைச் செய்ய, எங்கள் பிணைப்பு வகை "என்று குறிப்பிடுகிறோம் SmsServicePortType"மற்றும் உறுப்பில்" துறைமுக வகை"ஒரே வகையின் பெயருடன், செய்திகளுக்கு நடைமுறைகளை பிணைப்பதை நாங்கள் குறிப்பிடுகிறோம். எனவே, உள்வரும் செய்தி (கிளையண்டிலிருந்து சர்வருக்கு) "என்று அழைக்கப்படும். sendSmsRequest", மற்றும் வெளிச்செல்லும் (சர்வரில் இருந்து கிளையன்ட் வரை)" sendSmsResponse" WSDL இல் உள்ள அனைத்து பெயர்களையும் போலவே, உள்வரும் மற்றும் வெளிச்செல்லும் செய்திகளின் பெயர்கள் தன்னிச்சையானவை.

இப்போது நாம் செய்திகளை விவரிக்க வேண்டும், அதாவது. உள்வரும் மற்றும் வெளிச்செல்லும்:


இதைச் செய்ய நாங்கள் கூறுகளைச் சேர்க்கிறோம் " செய்தி"பெயர்களுடன்" sendSmsRequest"மற்றும்" sendSmsResponse" முறையே. அவற்றில் உள்ளீடு ஒரு உறையாக இருக்க வேண்டும் என்பதைக் குறிப்பிடுகிறோம், அதன் அமைப்பு தரவு வகைக்கு ஒத்திருக்கிறது " கோரிக்கை" அதன் பிறகு, தரவு வகையைக் கொண்ட சர்வரில் இருந்து ஒரு உறை திரும்பும் - “ பதில்».

இப்போது நாம் கொஞ்சம் செய்ய வேண்டும் - இந்த வகைகளின் விளக்கத்தை எங்கள் WSDL கோப்பில் சேர்க்கவும்! WSDL உள்வரும் மற்றும் வெளிச்செல்லும் தரவை எவ்வாறு விவரிக்கிறது என்று நீங்கள் நினைக்கிறீர்கள்? நீங்கள் ஏற்கனவே எல்லாவற்றையும் நீண்ட காலத்திற்கு முன்பே புரிந்துகொண்டீர்கள் என்று நினைக்கிறேன், XML திட்டங்களைப் பயன்படுத்துகிறீர்கள் என்று நீங்களே சொன்னீர்கள்! நீங்கள் முற்றிலும் சரியாக இருப்பீர்கள்!


நீங்கள் எங்களை வாழ்த்தலாம்! எங்கள் முதல் WSDL எழுதப்பட்டது! மேலும் எங்கள் இலக்கை அடைவதற்கு ஒரு படி நெருக்கமாக இருக்கிறோம்.
அடுத்து, எங்களின் சொந்த விநியோகிக்கப்பட்ட பயன்பாடுகளை உருவாக்குவதற்கு PHP என்ன வழங்குகிறது என்பதைப் பார்ப்போம்.

5 எங்கள் முதல் SOAP சேவையகம்

PHP இல் SOAP சேவையகத்தை உருவாக்க, உள்ளமைக்கப்பட்ட SoapServer வகுப்பைப் பயன்படுத்துவோம் என்று முன்பு எழுதினேன். மேலும் அனைத்து செயல்களும் என்னைப் போலவே நடக்க, உங்கள் PHP ஐ சிறிது மாற்றியமைக்க வேண்டும். இன்னும் துல்லியமாக இருக்க, நீங்கள் "php-soap" நீட்டிப்பை நிறுவியுள்ளீர்கள் என்பதை உறுதிப்படுத்த வேண்டும். அதிகாரப்பூர்வ PHP இணையதளத்தில் உங்கள் இணைய சேவையகத்தில் அதை எவ்வாறு நிறுவுவது என்பதைப் படிப்பது சிறந்தது (குறிப்புகளின் பட்டியலைப் பார்க்கவும்).

எல்லாம் நிறுவப்பட்டு கட்டமைக்கப்பட்ட பிறகு, உங்கள் ஹோஸ்டிங்கின் ரூட் கோப்புறையில் ஒரு கோப்பை உருவாக்க வேண்டும். smsservice.php» பின்வரும் உள்ளடக்கத்துடன்:

setClass("SoapSmsGateWay"); //சர்வர் $server->கைப்பிடி();
"ini_set" செயல்பாட்டின் மூலம் வரிக்கு மேலே உள்ளதை விளக்க வேண்டிய அவசியம் இல்லை என்று நம்புகிறேன். ஏனெனில் சேவையகத்திலிருந்து கிளையண்டிற்கு எந்த HTTP தலைப்புகளை அனுப்புவோம் என்பது அங்கு தீர்மானிக்கப்படுகிறது மற்றும் சூழல் கட்டமைக்கப்பட்டுள்ளது. “ini_set” வரியில், WSDL கோப்பின் தற்காலிக சேமிப்பை முடக்குகிறோம், இதனால் அதில் உள்ள மாற்றங்கள் உடனடியாக கிளையண்டில் நடைமுறைக்கு வரும்.

இப்போது நாங்கள் சேவையகத்திற்கு வருகிறோம்! நீங்கள் பார்க்க முடியும் என, முழு SOAP சேவையகமும் மூன்று வரிகளை மட்டுமே எடுக்கும்! முதல் வரியில், SoapServer ஆப்ஜெக்ட்டின் புதிய நிகழ்வை உருவாக்கி, வலைச் சேவையின் WSDL விளக்கத்தின் முகவரியை அதன் கட்டமைப்பாளருக்கு அனுப்புவோம். இது ஒரு கோப்பில் ஹோஸ்டிங்கின் ரூட்டில் சுய விளக்கமளிக்கும் பெயருடன் அமைந்திருக்கும் என்பதை இப்போது நாங்கள் அறிவோம். smsservice.wsdl.php" இரண்டாவது வரியில், வாடிக்கையாளரிடமிருந்து பெறப்பட்ட உறையைச் செயலாக்குவதற்கும், பதிலுடன் உறையைத் திருப்பி அனுப்புவதற்கும் எந்த வகுப்பை இழுக்க வேண்டும் என்பதை SOAP சேவையகத்திற்குச் சொல்கிறோம். நீங்கள் யூகித்தபடி, இந்த வகுப்பில் எங்கள் ஒரே முறை விவரிக்கப்படும் எஸ்எம்எஸ் அனுப்பவும். மூன்றாவது வரியில் நாங்கள் சேவையகத்தைத் தொடங்குகிறோம்! அவ்வளவுதான், எங்கள் சர்வர் தயாராக உள்ளது! இதன் மூலம் நான் நம் அனைவரையும் வாழ்த்துகிறேன்!

இப்போது நாம் WSDL கோப்பை உருவாக்க வேண்டும். இதைச் செய்ய, நீங்கள் முந்தைய பகுதியிலிருந்து அதன் உள்ளடக்கங்களை வெறுமனே நகலெடுக்கலாம் அல்லது சுதந்திரத்தை எடுத்து சிறிது "டெம்ப்ளேட்" செய்யலாம்:

"; ?> /" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http:// schemas.xmlsoap.org/wsdl/http/" name="SmsWsdl" xmlns="http://schemas.xmlsoap.org/wsdl/"> /"> /smsservice.php" />
இந்த கட்டத்தில், இதன் விளைவாக வரும் சேவையகத்தில் நாம் முழுமையாக திருப்தி அடைய வேண்டும், ஏனெனில் அதற்கு வரும் உறைகளை பதிவு செய்து, உள்வரும் தரவை அமைதியாக பகுப்பாய்வு செய்யலாம். சர்வரில் எதையும் பெறுவதற்கு, எங்களுக்கு ஒரு கிளையன்ட் தேவை. எனவே அதற்கு வருவோம்!

வழியில் 6 SOAP கிளையண்ட்

முதலில், நாம் ஒரு கோப்பை உருவாக்க வேண்டும், அதில் நாம் கிளையண்டை எழுதுவோம். வழக்கம் போல், நாங்கள் அதை ஹோஸ்டின் ரூட்டில் உருவாக்கி அதை அழைப்போம் " வாடிக்கையாளர்.php", மற்றும் உள்ளே பின்வருவனவற்றை எழுதுவோம்:

செய்திப் பட்டியல் = புதிய செய்திப் பட்டியல்(); $req->messageList->செய்தி = புதிய செய்தி(); $req->messageList->message->phone = "79871234567"; $req->messageList->message->text = "சோதனை செய்தி 1"; $req->messageList->message->date = "2013-07-21T15:00:00.26"; $req->messageList->message->type = 15; $client = புதிய SoapClient("http://($_SERVER["HTTP_HOST"])/smsservice.wsdl.php", array("soap_version" => SOAP_1_2)); var_dump($client->sendSms($req));
நமது பொருட்களை விவரிப்போம். நாங்கள் WSDL ஐ எழுதியபோது, ​​​​அது சேவையகத்திற்கு உள்வரும் உறைக்கான மூன்று நிறுவனங்களை விவரித்தது: கோரிக்கை, செய்தி பட்டியல்மற்றும் செய்தி. அதன்படி வகுப்புகள் கோரிக்கை, செய்தி பட்டியல்மற்றும் செய்திஎங்கள் PHP ஸ்கிரிப்ட்டில் இந்த நிறுவனங்களின் பிரதிபலிப்பு.

நாம் பொருள்களை வரையறுத்தவுடன், நாம் ஒரு பொருளை உருவாக்க வேண்டும் ( $req), நாங்கள் சேவையகத்திற்கு அனுப்புவோம். அதன் பிறகு எங்களுக்கு மிகவும் பிடித்த இரண்டு வரிகள் வருகின்றன! எங்கள் SOAP வாடிக்கையாளர்! நம்பினாலும் நம்பாவிட்டாலும், வாடிக்கையாளர்களிடமிருந்து செய்திகளைப் பெறுவதற்கு எங்கள் சேவையகத்திற்கு இது போதுமானது, அதே போல் எங்கள் சேவையகம் அவற்றை வெற்றிகரமாகப் பெறவும் செயலாக்கவும்! அவற்றில் முதலாவதாக, நாங்கள் SoapClient வகுப்பின் நிகழ்வை உருவாக்கி, WSDL கோப்பின் இருப்பிடத்தின் முகவரியை அதன் கட்டமைப்பாளருக்கு அனுப்புகிறோம், மேலும் SOAP நெறிமுறை பதிப்பு 1.2 ஐப் பயன்படுத்தி வேலை செய்வோம் என்பதை அளவுருக்களில் வெளிப்படையாகக் குறிப்பிடுகிறோம். அடுத்த வரியில் நாம் முறையை அழைக்கிறோம் எஸ்எம்எஸ் அனுப்பவும்பொருள் $ வாடிக்கையாளர்உடனடியாக உலாவியில் முடிவைக் காண்பிக்கும்.
அதை இயக்கி, இறுதியாக என்ன கிடைத்தது என்று பார்ப்போம்!

சேவையகத்திலிருந்து பின்வரும் பொருள் எனக்கு திருப்பி அனுப்பப்பட்டது:

பொருள்(stdClass) பொது "நிலை" => பூலியன் உண்மை
இது மிகவும் நல்லது, ஏனென்றால் ... எங்கள் சேவையகம் வேலை செய்கிறது என்பதை இப்போது நாங்கள் உறுதியாக அறிவோம், மேலும் அது செயல்படுவது மட்டுமல்லாமல், கிளையண்டிற்கு சில மதிப்புகளையும் திருப்பித் தரலாம்!

இப்போது சர்வர் பக்கத்தில் நாம் விவேகத்துடன் வைத்திருக்கும் பதிவைப் பார்ப்போம்! அதன் முதல் பகுதியில், சர்வரில் வந்த மூலத் தரவைக் காண்கிறோம்:

79871234567 சோதனை செய்தி 1 2013-07-21T15:00:00.26 15
இதுதான் உறை. அது எப்படி இருக்கும் என்று இப்போது உங்களுக்குத் தெரியும்! ஆனால் எல்லா நேரத்திலும் அதைப் பார்ப்பதில் நாங்கள் ஆர்வமாக இருப்போம் என்பது சாத்தியமில்லை, எனவே பதிவு கோப்பிலிருந்து பொருளை நீக்கிவிட்டு எல்லாம் சரியாக இருக்கிறதா என்று பார்ப்போம்:

பொருள்(stdClass) public "messageList" => object(stdClass) பொது "செய்தி" => object(stdClass) public "phone" => சரம் "79871234567" (length=11) public "text" => string "சோதனை செய்தி 1 " (நீளம்=37) பொது "தேதி" => சரம் "2013-07-21T15:00:00.26" (நீளம்=22) பொது "வகை" => சரம் "15" (நீளம்=2)
நீங்கள் பார்க்க முடியும் என, பொருள் சரியாக நீக்கப்பட்டது, அதற்காக நான் நம் அனைவரையும் வாழ்த்த விரும்புகிறேன்! இன்னும் சுவாரஸ்யமான ஒன்று நமக்கு அடுத்து காத்திருக்கிறது! அதாவது, நாங்கள் கிளையண்டை சேவையகத்திற்கு அனுப்புவோம் ஒரு SMS செய்தியை மட்டும் அல்ல, ஆனால் ஒரு முழு பேக் (இன்னும் துல்லியமாக, மூன்று)!

7 சிக்கலான பொருட்களை அனுப்புதல்

ஒரு பாக்கெட்டில் ஒரு முழு செய்திகளையும் சேவையகத்திற்கு எவ்வாறு மாற்றுவது என்று யோசிப்போம்? மெசேஜ்லிஸ்ட் உறுப்புக்குள் ஒரு வரிசையை ஒழுங்கமைப்பதே எளிதான வழி! இதை செய்வோம்:

// சேவையகத்திற்கு அனுப்ப ஒரு பொருளை உருவாக்கவும் $req = புதிய கோரிக்கை(); $req->messageList = புதிய MessageList(); $msg1 = புதிய செய்தி(); $msg1->ஃபோன் = "79871234567"; $msg1->உரை = "சோதனை செய்தி 1"; $msg1->தேதி = "2013-07-21T15:00:00.26"; $msg1->வகை = 15; $msg2 = புதிய செய்தி(); $msg2->ஃபோன் = "79871234567"; $msg2->உரை = "சோதனை செய்தி 2"; $msg2->தேதி = "2014-08-22T16:01:10"; $msg2->வகை = 16; $msg3 = புதிய செய்தி(); $msg3->தொலைபேசி = "79871234567"; $msg3->உரை = "சோதனை செய்தி 3"; $msg3->தேதி = "2014-08-22T16:01:10"; $msg3->வகை = 17; $req->messageList->செய்தி = $msg1; $req->messageList->செய்தி = $msg2; $req->messageList->செய்தி = $msg3;
கிளையண்டிடமிருந்து பின்வரும் பாக்கெட் பெறப்பட்டது என்பதை எங்கள் பதிவுகள் குறிப்பிடுகின்றன:

79871234567 சோதனை செய்தி 1 2013-07-21T15:00:00.26 15 79871234567 சோதனை செய்தி 2 2014-08-22T16:01:10 16 79871234567 சோதனை செய்தி 3 2014-08-22T16:01:10 17
என்ன முட்டாள்தனம் என்கிறீர்களா? நீங்கள் ஒரு வகையில் சரியாக இருப்பீர்கள், ஏனென்றால்... ஒரு பொருள் கிளையண்டை விட்டு வெளியேறியது என்பதை அறிந்தவுடன், அது ஒரு உறை வடிவில் முற்றிலும் அதே வடிவத்தில் எங்கள் சேவையகத்திற்கு வந்தது. உண்மை, எஸ்எம்எஸ் செய்திகள் நமக்குத் தேவையான வகையில் எக்ஸ்எம்எல்லில் வரிசைப்படுத்தப்படவில்லை - அவை உறுப்புகளில் மூடப்பட்டிருக்க வேண்டும். செய்தி, உள் இல்லை கட்டமைப்பு. அப்படிப்பட்ட பொருள் எந்த வடிவில் முறைக்கு வருகிறது என்று இப்போது பார்க்கலாம் எஸ்எம்எஸ் அனுப்பவும்:

Object(stdClass) பொது "messageList" => object(stdClass) பொது "செய்தி" => object(stdClass) பொது "Struct" => array (size=3) 0 => object(stdClass) public "phone" => சரம் "79871234567" (நீளம்=11) பொது "உரை" => சரம் "சோதனை செய்தி 1" (நீளம்=37) பொது "தேதி" => சரம் "2013-07-21T15:00:00.26" (நீளம்=22) பொது " வகை" => சரம் "15" (நீளம்=2) 1 => பொருள்(stdClass) பொது "ஃபோன்" => சரம் "79871234567" (நீளம்=11) பொது "உரை" => சரம் "சோதனை செய்தி 2" (நீளம்= 37) பொது "தேதி" => சரம் "2014-08-22T16:01:10" (நீளம்=19) பொது "வகை" => சரம் "16" (நீளம்=2) 2 => பொருள்(stdClass) பொது "ஃபோன் " => சரம் "79871234567" (நீளம்=11) பொது "உரை" => சரம் "சோதனை செய்தி 3" (நீளம்=37) பொது "தேதி" => சரம் "2014-08-22T16:01:10" (நீளம்= 19) பொது "வகை" => சரம் "17" (நீளம்=2)
இந்த அறிவு நமக்கு என்ன தருகிறது? நாம் தேர்ந்தெடுத்த பாதை சரியாக இல்லை மற்றும் "சர்வரில் சரியான தரவு கட்டமைப்பை எவ்வாறு பெறுவது?" என்ற கேள்விக்கான பதிலைப் பெறவில்லை. ஆனால் விரக்தியடைய வேண்டாம் என்று நான் பரிந்துரைக்கிறேன் மற்றும் எங்கள் வரிசையை வகைக்கு மாற்ற முயற்சிக்கவும் ஒரு பொருள்:

$req->messageList->message = (object)$req->messageList->message;
இந்த வழக்கில், நாங்கள் மற்றொரு உறை பெறுவோம்:

79871234567 சோதனை செய்தி 1 2013-07-21T15:00:00.26 15 79871234567 சோதனை செய்தி 2 2014-08-22T16:01:10 16 79871234567 சோதனை செய்தி 3 2014-08-22T16:01:10 17
முறைக்கு வந்தது எஸ்எம்எஸ் அனுப்பவும்பொருள் பின்வரும் அமைப்பைக் கொண்டுள்ளது:

ஆப்ஜெக்ட்(stdClass) பொது "messageList" => object(stdClass) பொது "செய்தி" => object(stdClass) பொது "BOGUS" => array (size=3) 0 => object(stdClass) public "phone" => சரம் "79871234567" (நீளம்=11) பொது "உரை" => சரம் "சோதனை செய்தி 1" (நீளம்=37) பொது "தேதி" => சரம் "2013-07-21T15:00:00.26" (நீளம்=22) பொது " வகை" => சரம் "15" (நீளம்=2) 1 => பொருள்(stdClass) பொது "ஃபோன்" => சரம் "79871234567" (நீளம்=11) பொது "உரை" => சரம் "சோதனை செய்தி 2" (நீளம்= 37) பொது "தேதி" => சரம் "2014-08-22T16:01:10" (நீளம்=19) பொது "வகை" => சரம் "16" (நீளம்=2) 2 => பொருள்(stdClass) பொது "ஃபோன் " => சரம் "79871234567" (நீளம்=11) பொது "உரை" => சரம் "சோதனை செய்தி 3" (நீளம்=37) பொது "தேதி" => சரம் "2014-08-22T16:01:10" (நீளம்= 19) பொது "வகை" => சரம் "17" (நீளம்=2)
என்னைப் பொறுத்தவரை, "விதிகளின் இடங்களை மாற்றுவதால் தொகை மாறாது" (c). என்ன போலி, என்ன கட்டமைப்பு- நாங்கள் இன்னும் எங்கள் இலக்கை அடையவில்லை! அதை அடைய, இந்த புரிந்துகொள்ள முடியாத பெயர்களுக்குப் பதிலாக நமது பூர்வீகம் காட்டப்படுவதை உறுதி செய்ய வேண்டும். செய்தி. ஆனால் இதை எப்படி அடைவது என்பது ஆசிரியருக்கு இன்னும் தெரியவில்லை. எனவே, நாம் செய்யக்கூடிய ஒரே விஷயம், கூடுதல் கொள்கலனை அகற்றுவதுதான். வேறு வார்த்தைகளில் கூறுவதானால், அதற்கு பதிலாக நாங்கள் இப்போது உறுதி செய்வோம் செய்திஆனது போலி! இதைச் செய்ய, பொருளை பின்வருமாறு மாற்றவும்:

// சேவையகத்திற்கு அனுப்ப ஒரு பொருளை உருவாக்கவும் $req = புதிய கோரிக்கை(); $msg1 = புதிய செய்தி(); $msg1->ஃபோன் = "79871234567"; $msg1->உரை = "சோதனை செய்தி 1"; $msg1->தேதி = "2013-07-21T15:00:00.26"; $msg1->வகை = 15; $msg2 = புதிய செய்தி(); $msg2->ஃபோன் = "79871234567"; $msg2->உரை = "சோதனை செய்தி 2"; $msg2->தேதி = "2014-08-22T16:01:10"; $msg2->வகை = 16; $msg3 = புதிய செய்தி(); $msg3->தொலைபேசி = "79871234567"; $msg3->text = "சோதனை செய்தி 3"; $msg3->தேதி = "2014-08-22T16:01:10"; $msg3->வகை = 17; $req->messageList = $msg1; $req->messageList = $msg2; $req->messageList = $msg3; $req->messageList = (பொருள்)$req->messageList;
நமக்கு அதிர்ஷ்டம் கிடைத்து, வரைபடத்திலிருந்து சரியான பெயர் வந்தால் என்ன செய்வது? இதைச் செய்ய, வந்த உறையைப் பார்ப்போம்:

79871234567 சோதனை செய்தி 1 2013-07-21T15:00:00.26 15 79871234567 சோதனை செய்தி 2 2014-08-22T16:01:10 16 79871234567 சோதனை செய்தி 3 2014-08-22T16:01:10 17
ஆம், ஒரு அதிசயம் நடக்கவில்லை! போலி- நாங்கள் வெல்ல மாட்டோம்! வந்து எஸ்எம்எஸ் அனுப்பவும்இந்த வழக்கில் உள்ள பொருள் இப்படி இருக்கும்:

பொருள்(stdClass) பொது "messageList" => object(stdClass) பொது "BOGUS" => வரிசை (அளவு=3) 0 => object(stdClass) பொது "ஃபோன்" => சரம் "79871234567" (நீளம்=11) பொது " உரை" => சரம் "சோதனை செய்தி 1" (நீளம்=37) பொது "தேதி" => சரம் "2013-07-21T15:00:00.26" (நீளம்=22) பொது "வகை" => சரம் "15" (நீளம் =2) 1 => object(stdClass) public "phone" => சரம் "79871234567" (length=11) public "text" => string "Test message 2" (length=37) public "date" => string " 2014-08-22T16:01:10" (நீளம்=19) பொது "வகை" => சரம் "16" (நீளம்=2) 2 => பொருள்(stdClass) பொது "ஃபோன்" => சரம் "79871234567" (நீளம்= 11) பொது "உரை" => சரம் "சோதனை செய்தி 3" (நீளம்=37) பொது "தேதி" => சரம் "2014-08-22T16:01:10" (நீளம்=19) பொது "வகை" => சரம் " 17" (நீளம்=2)
அவர்கள் சொல்வது போல் - "கிட்டத்தட்ட"! இந்த (சற்று சோகமான) குறிப்பில், விஷயங்களை மெதுவாக முடித்து, நமக்காக சில முடிவுகளை எடுக்க நான் முன்மொழிகிறேன்.

8 முடிவு

இறுதியாக நாங்கள் இங்கு வந்தோம்! நீங்கள் இப்போது என்ன செய்ய முடியும் என்பதைக் கண்டுபிடிப்போம்:
  • உங்கள் இணைய சேவைக்கு தேவையான WSDL கோப்பை நீங்கள் எழுதலாம்;
  • SOAP வழியாக சேவையகத்துடன் தொடர்பு கொள்ளக்கூடிய உங்கள் சொந்த கிளையண்டை நீங்கள் எளிதாக எழுதலாம்;
  • SOAP மூலம் வெளி உலகத்துடன் தொடர்பு கொள்ளும் உங்கள் சொந்த சர்வரை நீங்கள் எழுதலாம்;
  • உங்கள் கிளையண்டிலிருந்து (சில கட்டுப்பாடுகளுடன்) ஒரே வகையான பொருள்களின் வரிசைகளை சேவையகத்திற்கு அனுப்பலாம்.
எங்கள் சிறிய ஆராய்ச்சியின் போது நாங்கள் சில கண்டுபிடிப்புகளையும் செய்தோம்:
  • சொந்த SoapClient வகுப்பு XML இல் அதே வகையான தரவு கட்டமைப்புகளை சரியாக வரிசைப்படுத்தவில்லை;
  • XML க்கு ஒரு வரிசையை வரிசைப்படுத்தும்போது அது ஒரு கூடுதல் உறுப்பை உருவாக்குகிறது கட்டமைப்பு;
  • XML க்கு ஒரு பொருளை வரிசைப்படுத்தும்போது அது ஒரு கூடுதல் உறுப்பை உருவாக்குகிறது போலி;
  • போலிவிட குறைவான தீமை கட்டமைப்புஉறை மிகவும் கச்சிதமாக இருப்பதால் (உறையின் எக்ஸ்எம்எல் தலைப்பில் கூடுதல் பெயர்வெளிகள் சேர்க்கப்படவில்லை);
  • துரதிருஷ்டவசமாக, SoapServer வகுப்பு தானாகவே எங்கள் XML ஸ்கீமாவுடன் உறை தரவைச் சரிபார்க்காது (ஒருவேளை மற்ற சேவையகங்களும் இதைச் செய்யாது).

அது என்ன என்ற கேள்வியில் நான் தங்கமாட்டேன் இணைய சேவைகள்மற்றும் அவை ஏன் தேவைப்படுகின்றன. இணையத்தில் இந்த தலைப்பில் நிறைய கட்டுரைகள் உள்ளன. PHP இல் எந்த இணைய சேவைக்கும் கிளையண்டை உருவாக்குவது எவ்வளவு எளிது என்பதை சுருக்கமாக காட்ட முயற்சிக்கிறேன்.

அமைப்புகள்

உபயோகத்திற்காக வழலை php இல் நீங்கள் SOAP தொகுதியை இணைக்க வேண்டும் (php5 விநியோகத்தில் சேர்க்கப்பட்டுள்ளது). விண்டோஸின் கீழ், இது எளிமையாக செய்யப்படுகிறது - நீங்கள் சேர்க்க வேண்டும் (அதாவது சேர், ஏனெனில் இந்த வரி அங்கு கருத்து தெரிவிக்கப்படவில்லை, அது முற்றிலும் இல்லை) php.ini:
extension=php_soap.dll

நீங்கள் ஒரு தொகுதியாக php நிறுவப்பட்டிருந்தால், சேவையகத்தை மறுதொடக்கம் செய்ய மறக்காதீர்கள்.


WSDL ஆவணத்திலிருந்து SOAP கிளையண்டை உருவாக்குதல்

ஒரு SOAP கிளையண்டை உருவாக்குவது பொதுவாக நிகழ்கிறது WSDL ஆவணம், இது ஒரு குறிப்பிட்ட இணைய சேவையை முழுமையாக விவரிக்கும் ஒரு குறிப்பிட்ட வடிவத்தில் உள்ள XML ஆவணமாகும். WSDL பற்றிய விவரங்களுக்கு, W3C கூட்டமைப்பு இணையதளத்தைப் பார்க்கிறேன் - http://www.w3.org/TR/2005/WD-wsdl20-soap11-binding-20050510/.

இணைய சேவைக்கான கிளையண்டை உருவாக்க நீங்கள் தெரிந்து கொள்ள வேண்டிய முக்கிய விஷயம் அதன் WSDL ஆவணத்தின் URL ஐ அறிந்து கொள்வது.
எடுத்துக்காட்டாக, xmethods.com இலிருந்து "நாணய மாற்று விகிதம்" இணைய சேவையை எடுத்துக் கொள்வோம். ஆன்லைனில் மாற்று விகிதங்களைப் பெற உங்களை அனுமதிக்கும் இந்த இணையச் சேவையின் முகவரி http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl.

இரண்டாவது முக்கியமான விஷயம் என்னவென்றால், இணையச் சேவையின் விளக்கத்திலிருந்து, இந்தச் சேவை என்ன முறைகளை வழங்குகிறது, என்ன அளவுருக்களை உள்ளீட்டு மதிப்புகளாக (வழக்கமான PHP செயல்பாடு அல்லது வகுப்பை அழைப்பது போன்றது) என்பதைப் பற்றிய தகவல்களைப் பெறுவது அவசியம். முறை). பொதுவாக இந்தத் தகவல் அதன் இணையதளத்தில் சேவையின் விளக்கத்தில் இருக்கும். மாற்று விகிதங்களைப் பெறுவதற்கான எங்கள் இணையச் சேவை getRate() முறையை வழங்குகிறது, இதற்கு நாணயக் குறியீடுகள் வாதங்களாக அனுப்பப்படுகின்றன.

கடைசியாக, பதில் என்ன எதிர்பார்க்க வேண்டும் என்பதை அறிவது முக்கியம்: எத்தனை மதிப்புகள், எந்த வகை போன்றவை. இதை விளக்கத்திலிருந்தும் பெறலாம்.
இதன் விளைவாக, குறியீடு மிகவும் எளிமையானதாகவும், கச்சிதமானதாகவும், கிட்டத்தட்ட அடிப்படையாகவும் மாறும்:

// இணைய சேவையைப் பயன்படுத்துதல்
// xmethods.com இலிருந்து "நாணய மாற்று விகிதம்"

// WSDL ஆவணத்திலிருந்து SOAP கிளையண்டை உருவாக்குதல்
$client = புதிய SoapClient("http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl");

// SOAP கோரிக்கையை அனுப்பி முடிவைப் பெறவும்
$result = $client->getRate("us", "russia");

எதிரொலி 'தற்போதைய டாலர் மாற்று விகிதம்: ', $ முடிவு, ' ரூபிள்';
?>

குறியீட்டிலிருந்து நீங்கள் பார்க்க முடியும் என, நீங்கள் WSDL ஆவணத்தின் URL ஐ SoapClient கிளாஸ் கன்ஸ்ட்ரக்டருக்கு அனுப்ப வேண்டும் மற்றும் விரும்பிய இணைய சேவையுடன் பணிபுரிய ஒரு பொருளைப் பெற வேண்டும். இந்த பொருளின் ஒரு முறை அழைக்கப்படுகிறது, அதன் பெயர் இணைய சேவை முறையின் பெயரைப் போன்றது. இந்த முறை நாம் விரும்பும் முடிவைத் தருகிறது.

எனவே, இந்த எளிய உதாரணம் PHP இல் இணைய சேவைகளுக்கான SOAP கிளையண்டை உருவாக்கும் கொள்கையை விளக்குகிறது. இருப்பினும், ஒரு உண்மையான பயன்பாட்டில் இன்னும் கவனிக்க வேண்டிய விஷயங்கள் நிறைய உள்ளன, குறிப்பாக இணைய சேவை அழைக்கப்படும் போது, ​​அது தற்காலிகமாக கிடைக்காமல் போகலாம் அல்லது பிழையை ஏற்படுத்தலாம். இது ஒரு தொகுதியைப் பயன்படுத்துவதை தெளிவாக பரிந்துரைக்கிறது முயற்சி/பிடித்தல்/எறிதல் :)

இங்கே LeaseWeb இல், SOAP இணையச் சேவைகளுடன் எங்கள் உள் பயன்பாடுகளை ஒருவருக்கொருவர் ஒருங்கிணைக்க நாங்கள் நிறைய வேலை செய்கிறோம். குறிப்பாக எங்கள் பயன்பாடுகளின் மேம்பாடு மற்றும் சோதனையின் போது SOAP API உடன் பயிற்சி செய்யும் திறன் நமக்குத் தேவைப்படுவதால்.

$ curl -sS http://leaseweb.github.io/php-soap-client/installer | php

இது phar கோப்பை தற்போதைய வேலை செய்யும் கோப்பகத்தில் பதிவிறக்கம் செய்து, அதை இயக்கக்கூடியதாக மாற்றும், எனவே நீங்கள் பயன்படுத்துவதன் மூலம் உடனடியாக அதைப் பயன்படுத்தத் தொடங்கலாம்:

$ ./soap_client

சமீபத்திய முதன்மை பதிப்பை நிறுவ, நீங்கள் GitHub இலிருந்து நேரடியாக மூலக் குறியீட்டைப் பெறலாம், உங்கள் சொந்த .phar கோப்பை தொகுத்து அதை நிறுவவும் - GNU Make ஐப் பயன்படுத்தி.
.phar கோப்பை உருவாக்க, நீங்கள் இசையமைப்பாளர் நிறுவப்பட்டிருக்க வேண்டும். இசையமைப்பாளரைப் பற்றி மேலும் படிக்க அவர்களின் சிறந்த ஆவணங்களைப் பார்க்கவும்.

# php சோப் கிளையண்ட் $ git க்ளோனை நிறுவவும்

நீங்கள் இயங்கும் போது phar விதிவிலக்கை தொகுக்கத் தவறினால், உங்கள் php.ini இல் phar.readonly = ஆஃப் என்பதை அமைக்க வேண்டும். டெவலப்மெண்ட் மெஷினில் இதைச் செய்வது நல்லது, ஆனால் phar.readonly ஆஃப் என அமைக்கும்போது பாதுகாப்பு அபாயங்கள் குறித்து எச்சரிக்கையாக இருக்கவும்.

மேலே உள்ள make install கட்டளையானது soap_client அப்ளிகேஷனை /usr/local/bin க்கு நிறுவி அதை இயக்கக்கூடியதாக மாற்றும், எனவே நீங்கள் இதை எளிதாக அழைக்கலாம்:

$ soap_client php-soap-client பதிப்பு 2.1.3 பயன்பாடு: கட்டளை விருப்பங்கள்: ... கிடைக்கும் கட்டளைகள்: குறிப்பிடப்பட்ட `முறை` மூலம் தொலைநிலை சேவையை அழைக்கவும் மற்றும் stdout க்கு பதிலை வெளியிடவும். உதவி கட்டளைப் பட்டியலுக்கான உதவியைக் காட்டுகிறது பட்டியல்கள் கட்டளைகள் பட்டியல்-முறைகள் ரிமோட்டில் அழைக்க கிடைக்கக்கூடிய முறைகளின் பட்டியலைப் பெறவும். கோரிக்கை கொடுக்கப்பட்ட முறைக்கு xml வடிவமைக்கப்பட்ட SOAP கோரிக்கையை உருவாக்கவும் மற்றும் stdout க்கு வெளியீடு செய்யவும். wsdl ஒரு சோப்பு சேவையின் WSDL ஐப் பெறவும்.

இந்த கட்டத்தில் இருந்து நீங்கள் உங்கள் கணினியில் soap_client.phar ஐ /usr/local/bin/soap_client இல் நிறுவியுள்ளீர்கள் என்றும், /urs/local/bin உங்கள் $PATH இல் இருப்பதாகவும் கருதுகிறோம்.

ரிமோட் சேவை http://www.webservicex.net/ConvertTemperature.asmx இல் என்ன முறைகள் உள்ளன என்பதைப் பார்க்க விரும்புகிறோம். நாம் பின்வரும் கட்டளையை வழங்கலாம்:

$ soap_client --endpoint="http://www.webservicex.net/ConvertTemperature.asmx?WSDL" பட்டியல்-முறைகள்

இது பின்வருவனவற்றை வெளியிடும்:

கன்வெர்ட் டெம்ப்

மேலே உள்ள கட்டளையை -vvv விருப்பத்துடன் இயக்கினால், நீங்கள் அதிக verbose வெளியீட்டைப் பெறுவீர்கள்.
இந்த வழக்கில் கிடைக்கும் ஒரே முறை ConvertTemp ஆகும். இந்த முறைக்கு SOAP XML கோரிக்கை எப்படி இருக்கும் என்று பார்ப்போம்:

$ soap_client --endpoint="http://www.webservicex.net/ConvertTemperature.asmx?WSDL" கோரிக்கை ConvertTemp 0

தொலைநிலை சேவையில் ConvertTemp முறைக்கு SOAP கோரிக்கையை நீங்கள் செய்ய விரும்பினால், அழைப்பு துணை கட்டளையைப் பயன்படுத்தவும்:

$ soap_client --endpoint="http://www.webservicex.net/ConvertTemperature.asmx?WSDL" அழைப்பு --editor ConvertTemp

அழைப்பு துணை கட்டளைக்கு பிறகு --editor விருப்பத்தை கவனிக்கவும். நீங்கள் --editor flagஐப் பயன்படுத்தினால், உங்கள் சூழல் மாறி $EDITOR இல் குறிப்பிடப்பட்டுள்ள எடிட்டரை soap_client திறக்கும், எனவே நீங்கள் XML கோரிக்கையை அனுப்பும் முன் மாற்றலாம்.

நீங்கள் ஒரே கோரிக்கையை பலமுறை வழங்கினால், நீங்கள் ஒரு சோப் கோரிக்கையை உள்ளூர் XML கோப்பாகச் சேமித்து, அதை soap_client அழைப்பு கட்டளையின் /dev/stdin க்கு அனுப்பலாம்:

# கோரிக்கையை xml பெற்று உள்நாட்டில் சேமிக்கவும் $ soap_client --endpoint="http://www.webservicex.net/ConvertTemperature.asmx?WSDL" கோரிக்கை ConvertTemp > my_sample_request.xml # இப்போது எனது_மாதிரி_request.xml ஐத் திருத்தவும் # இப்போது நீங்கள் அழைக்கலாம் இந்த முன் தயாரிக்கப்பட்ட கோரிக்கையுடன் கன்வெர்ட்டெம்ப் முறை $ soap_client --endpoint="http://www.webservicex.net/ConvertTemperature.asmx?WSDL" Call ConvertTemp< my_sample_request.xml

தொலைதூர வலை சேவையை ஆராயும் போது நீங்கள் soap_client கட்டளைகளை அடிக்கடி திரும்பத் திரும்பச் சொல்வதால், WSDL க்கு URL ஐக் கொண்டிருக்கும் சூழல் மாறி SOAPCLIENT_ENDPOINT ஐ அமைப்பதன் மூலம் சிறிது நேரத்தைச் சேமிக்கலாம். இந்த சூழல் மாறி அமைக்கப்படும் போது --endpoint கட்டளை வரி விருப்பத்தை நீங்கள் தவிர்க்கலாம். இப்போது இதைச் செய்து, ConvertTemp முறையை அழைப்போம்:

$ ஏற்றுமதி SOAPCLIENT_ENDPOINT="http://www.webservicex.net/ConvertTemperature.asmx?WSDL" $ soap_client அழைப்பு ConvertTemp< my_sample_request.xml

107.6 டிகிரி ஃபாரன்ஹீட் செல்சியஸில் எவ்வளவு இருக்கிறது என்பதை அறிய விரும்பினேன், எனவே எனது my_sample_request.xml இல் உள்ளவை:

$ cat my_sample_request.xml 107.6 டிகிரி பாரன்ஹீட் டிகிரி செல்சியஸ்

$ soap_client அழைப்பு ConvertTemp< my_sample_request.xml stdClass Object ( => 42)

பதில் 42.

XML வடிவத்தில் பதில்களைப் பார்த்தால் --xml கட்டளை வரி விருப்பத்தைப் பயன்படுத்தலாம்:

$ soap_client அழைப்பு --xml ConvertTemp< my_sample_request.xml 42

இந்த டுடோரியல் SOAP API களை ஆராய்வது, சோதனை செய்தல் மற்றும்/அல்லது உருவாக்குவது போன்றவற்றைத் தொடங்குவதற்குப் போதுமான தகவலை உங்களுக்கு வழங்கும்.
எதிர்கால வலைப்பதிவு இடுகையில், நான் php சோப் கிளையண்டின் தலைப்பைத் தொடர்வேன். நாங்கள் தற்போது இணையத்திற்கான .phar காப்பகத்தை பேக் செய்யும் பணியில் ஈடுபட்டுள்ளோம்.

பாடல் பகுதி.

வெளியில் இருந்து அணுகக்கூடிய ஒரு குறிப்பிட்ட அமைப்பை நீங்கள் செயல்படுத்தியுள்ளீர்கள் அல்லது செயல்படுத்துகிறீர்கள் என்று கற்பனை செய்து பாருங்கள். அந்த. நீங்கள் தொடர்பு கொள்ள வேண்டிய ஒரு குறிப்பிட்ட சேவையகம் உள்ளது. உதாரணமாக ஒரு இணைய சேவையகம்.

இந்த சர்வர் பல செயல்களைச் செய்யலாம், தரவுத்தளத்துடன் வேலை செய்யலாம், பிற சேவையகங்களுக்கு சில மூன்றாம் தரப்பு கோரிக்கைகளைச் செய்யலாம், சில கணக்கீடுகளைச் செய்யலாம். அவருக்குத் தெரிந்த சூழ்நிலையின்படி வாழலாம் மற்றும் உருவாக்கலாம் (அதாவது டெவலப்பர்களின் சூழ்நிலையின்படி). ஒரு நபர் அத்தகைய சேவையகத்துடன் தொடர்புகொள்வது சுவாரஸ்யமானது அல்ல, ஏனெனில் அவர் படங்கள் மற்றும் பிற பயனர் நட்பு உள்ளடக்கத்துடன் அழகான பக்கங்களை வழங்க முடியாது/விரும்பாமல் இருக்கலாம். இது எழுதப்பட்டது மற்றும் வேலை செய்யும் மற்றும் தரவைக் கேட்கும் போது வழங்குவதற்கு, இது மனிதனால் படிக்கக்கூடியது என்று கவலைப்படாமல், வாடிக்கையாளர் அதைச் சமாளிப்பார்.

பிற அமைப்புகள், இந்த சேவையகத்தை அணுகி, இந்த சேவையகத்திலிருந்து பெறப்பட்ட தரவை ஏற்கனவே தங்கள் விருப்பப்படி அப்புறப்படுத்தலாம் - செயல்முறை, குவித்தல், தங்கள் வாடிக்கையாளர்களுக்கு வழங்குதல் போன்றவை.

சரி, அத்தகைய சேவையகங்களுடன் தொடர்புகொள்வதற்கான விருப்பங்களில் ஒன்று SOAP ஆகும். SOAP xml செய்தி பரிமாற்ற நெறிமுறை.

நடைமுறை பகுதி.

ஒரு இணைய சேவை (இது சேவையகம் என்ன வழங்குகிறது மற்றும் வாடிக்கையாளர்கள் பயன்படுத்தும் பெயர்) தெளிவாக கட்டமைக்கப்பட்ட செய்திகளுடன் சேவையகத்துடன் தொடர்புகொள்வதை சாத்தியமாக்குகிறது. இணையச் சேவை எந்தத் தரவையும் ஏற்கவில்லை என்பதே உண்மை. விதிகளுக்கு இணங்காத எந்த செய்திக்கும் இணைய சேவை பிழையுடன் பதிலளிக்கும். பிழையானது, தெளிவான கட்டமைப்புடன் xml வடிவத்திலும் இருக்கும் (இது செய்தியின் உரையில் உண்மையல்ல).

WSDL (இணைய சேவைகள் விளக்கம் மொழி). இணைய சேவைக்காக செய்திகள் உருவாக்கப்படும் விதிகள் xml ஐப் பயன்படுத்தி விவரிக்கப்பட்டுள்ளன, மேலும் தெளிவான அமைப்பும் உள்ளது. அந்த. ஒரு வலை சேவையானது ஒரு முறையை அழைக்கும் திறனை வழங்கினால், இந்த முறைக்கு என்ன அளவுருக்கள் பயன்படுத்தப்படுகின்றன என்பதை வாடிக்கையாளர்களுக்குத் தெரிந்துகொள்ள அனுமதிக்க வேண்டும். இணையச் சேவையானது Method1க்கான ஒரு சரத்தை அளவுருவாக எதிர்பார்க்கிறது மற்றும் அந்த சரத்திற்கு Param1 என்று பெயரிடப்பட்டால், இந்த விதிகள் இணைய சேவை விளக்கத்தில் குறிப்பிடப்படும்.

எளிய வகைகள் மட்டுமல்ல, பொருள்கள் மற்றும் பொருள்களின் சேகரிப்புகளும் அளவுருக்களாக அனுப்பப்படலாம். ஒரு பொருளின் விளக்கம் பொருளின் ஒவ்வொரு கூறுகளின் விளக்கத்திற்கும் வருகிறது. ஒரு பொருள் பல புலங்களைக் கொண்டிருந்தால், ஒவ்வொரு புலமும் விவரிக்கப்படும், அதன் வகை, பெயர் (சாத்தியமான மதிப்புகள் என்ன). புலங்கள் சிக்கலான வகைகளாகவும் இருக்கலாம், மேலும் பல வகைகளின் விளக்கம் எளிமையானவற்றுடன் முடிவடையும் வரை - சரம், பூலியன், எண், தேதி... இருப்பினும், சில குறிப்பிட்ட வகைகள் எளிமையானதாக மாறக்கூடும், வாடிக்கையாளர்களுக்கு இது முக்கியம் அவை என்ன மதிப்புகளைக் கொண்டிருக்கலாம் என்பதை புரிந்து கொள்ள முடியும்.

வாடிக்கையாளர்களுக்கு, இணைய சேவையின் url ஐ அறிந்தால் போதும்;

இந்த அனைத்து மணிகள் மற்றும் விசில்களின் நன்மைகள் என்ன:

  • பெரும்பாலான அமைப்புகளில், முறைகள் மற்றும் வகைகளின் விளக்கம் தானாகவே நிகழ்கிறது. அந்த. சர்வரில் உள்ள புரோகிராமர் இந்த முறையை ஒரு இணைய சேவை மூலம் அழைக்கலாம் என்று கூற வேண்டும், மேலும் wsdl விளக்கம் தானாகவே உருவாக்கப்படும்.
  • தெளிவான கட்டமைப்பைக் கொண்ட விளக்கத்தை எந்த சோப்பு கிளையண்டாலும் படிக்க முடியும். அந்த. இணையச் சேவை எதுவாக இருந்தாலும், இணையச் சேவை எந்தத் தரவைப் பெறுகிறது என்பதை வாடிக்கையாளர் புரிந்துகொள்வார். இந்த விளக்கத்தைப் பயன்படுத்தி, கிளையன்ட் பொருள் வகுப்புகள் என அழைக்கப்படும் அதன் உள் கட்டமைப்பை உருவாக்க முடியும். பிணைப்பு" மற்றும். இதன் விளைவாக, இணையச் சேவையைப் பயன்படுத்தும் புரோகிராமர் இது போன்ற ஒன்றை எழுத வேண்டும் (சூடோகோட்):

    புதிய பயனர்:=TSoapUser.Create("Vasya","Pupkin","admin"); soap.AddUser(NewUser);

  • தானியங்கி சரிபார்ப்பு.

    • xml சரிபார்ப்பு. xml நன்கு வடிவமைக்கப்பட்டிருக்க வேண்டும். தவறான xml - வாடிக்கையாளருக்கு உடனடியாக ஒரு பிழை, அவர் அதை வரிசைப்படுத்தட்டும்.
    • திட்ட-சரிபார்ப்பு. xml ஒரு குறிப்பிட்ட அமைப்பைக் கொண்டிருக்க வேண்டும். xml திட்டத்துடன் பொருந்தவில்லை - வாடிக்கையாளருக்கு உடனடியாக ஒரு பிழை, அவர் அதை வரிசைப்படுத்தட்டும்.
    • தரவு சரிபார்ப்பு சோப் சேவையகத்தால் மேற்கொள்ளப்படுகிறது, இதனால் தரவு வகைகள் மற்றும் கட்டுப்பாடுகள் விளக்கத்துடன் பொருந்துகின்றன.
  • அங்கீகாரம் மற்றும் அங்கீகாரம் ஒரு தனி முறையைப் பயன்படுத்தி செயல்படுத்தப்படலாம். பூர்வீகமாக. அல்லது http அங்கீகாரத்தைப் பயன்படுத்தவும்.
  • இணைய சேவைகள் சோப் நெறிமுறை வழியாகவும் http வழியாகவும் வேலை செய்யலாம், அதாவது கோரிக்கைகளைப் பெறுதல் மூலம். அதாவது, அளவுருக்கள் எளிமையான தரவு (கட்டமைப்பு இல்லாமல்) என்றால், நீங்கள் சாதாரணமாக www.site.com/users.asmx/GetUser?Name=Vasia அல்லது இடுகையைப் பெறலாம். இருப்பினும், இது எல்லா இடங்களிலும் இல்லை மற்றும் எப்போதும் இல்லை.
  • ... விக்கிபீடியாவில் பார்க்கவும்

பல குறைபாடுகளும் உள்ளன:

  • நியாயமற்ற பெரிய செய்தி அளவு. சரி, இங்கே xml இன் தன்மையானது, வடிவம் தேவையற்றது, அதிக குறிச்சொற்கள், அதிக பயனற்ற தகவல். மேலும் சோப்பு அதன் பணிநீக்கத்தை சேர்க்கிறது. இன்ட்ராநெட் அமைப்புகளுக்கு, இணையத்தை விட ட்ராஃபிக் சிக்கல் குறைவாக உள்ளது, எனவே உள்ளூர் நெட்வொர்க்குகளுக்கான சோப்புக்கு அதிக தேவை உள்ளது, குறிப்பாக ஷேர்பாயிண்ட் ஒரு சோப் வலை சேவையைக் கொண்டுள்ளது, இதன் மூலம் நீங்கள் வெற்றியுடன் தொடர்பு கொள்ளலாம் (மற்றும் சில வரம்புகள்).
  • இணையச் சேவையின் விளக்கத்தைத் தானாக மாற்றுவது அனைத்து வாடிக்கையாளர்களையும் உடைக்கும். சரி, எந்த அமைப்பிற்கும் இது போன்றது, பழைய முறைகளுடன் பின்தங்கிய இணக்கத்தன்மை ஆதரிக்கப்படாவிட்டால், அனைத்தும் வீழ்ச்சியடையும் ...
  • ஒரு கழித்தல் அல்ல, ஆனால் ஒரு குறைபாடு. அனைத்து முறை அழைப்புகளும் அணுவாக இருக்க வேண்டும். எடுத்துக்காட்டாக, ஒரு தரவுத்தளத்துடன் பணிபுரியும் போது, ​​நாம் ஒரு பரிவர்த்தனையைத் தொடங்கலாம், பல வினவல்களைச் செய்யலாம், பின்னர் திரும்பப் பெறலாம் அல்லது உறுதியளிக்கலாம். சோப்பில் பரிவர்த்தனைகள் இல்லை. ஒரு கோரிக்கை, ஒரு பதில், உரையாடல் முடிந்தது.
  • சர்வர் பக்கத்தில் உள்ளவை (எல்லாம் சரியாக விவரிக்கப்பட்டுள்ளதா?) மற்றும் கிளையண்டில் உள்ளவை (எனக்கு இங்கே என்ன விவரிக்கப்பட்டது?) பற்றிய விளக்கத்தைக் கையாள்வது மிகவும் கடினமாக இருக்கும். பல முறை நான் கிளையன்ட் தரப்பைச் சமாளிக்க வேண்டியிருந்தது மற்றும் சர்வர் புரோகிராமரின் தரவு தவறாக விவரிக்கப்பட்டுள்ளது என்று நம்ப வைக்க வேண்டியிருந்தது, ஆனால் அவரால் அதைப் பற்றி எதையும் புரிந்து கொள்ள முடியவில்லை, ஏனெனில் தானியங்கி உருவாக்கம் மற்றும் அவர் செய்யக்கூடாது, இது ஒரு விஷயம். மென்பொருள். பிழை, இயற்கையாகவே, முறைக் குறியீட்டில் இருந்தது, புரோகிராமர் அதைப் பார்க்கவில்லை.
  • இந்த இணைய சேவைகளைப் பயன்படுத்தும் நபர்களிடமிருந்து வலை சேவை உருவாக்குநர்கள் மிகவும் தொலைவில் உள்ளனர் என்பதை நடைமுறை காட்டுகிறது. எந்தவொரு கோரிக்கைக்கும் பதிலளிக்கும் விதமாக (வெளியில் இருந்து செல்லுபடியாகும்), புரிந்துகொள்ள முடியாத பிழை "பிழை 5. எல்லாம் மோசமாக உள்ளது". இது அனைத்தும் டெவலப்பர்களின் மனசாட்சியைப் பொறுத்தது :)
  • எனக்கு இன்னும் எதுவும் நினைவில் இல்லை என்று நான் நம்புகிறேன் ...

உதாரணமாக, திறந்த வலை சேவை பெலாவியா உள்ளது:

  • http://86.57.245.235/TimeTable/Service.asmx - நுழைவு புள்ளி, மூன்றாம் தரப்பு டெவலப்பர்களுக்கான முறைகளின் உரை விளக்கமும் உள்ளது.
  • http://86.57.245.235/TimeTable/Service.asmx?WSDL - பெறப்பட்ட மற்றும் திரும்பிய தரவின் முறைகள் மற்றும் வகைகளின் wsdl விளக்கம்.
  • http://86.57.245.235/TimeTable/Service.asmx?op=GetAirportsList - xml கோரிக்கை வகை மற்றும் xml பதிலின் உதாரணத்துடன் ஒரு குறிப்பிட்ட முறையின் விளக்கம்.

நீங்கள் கைமுறையாக ஒரு கோரிக்கையை உருவாக்கி அனுப்பலாம்:

POST /TimeTable/Service.asmx HTTP/1.1 ஹோஸ்ட்: 86.57.245.235 உள்ளடக்க-வகை: உரை/xml; charset=utf-8 உள்ளடக்க-நீளம்: நீளம் SOAPAction: "http://webservices.belavia.by/GetAirportsList" ru

பதில் வரும்:

HTTP/1.1 200 சரி தேதி: திங்கள், 30 செப் 2013 00:06:44 GMT சர்வர்: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 4.0.30319 Cache-Control: private, max -வயது=0 உள்ளடக்க-வகை: உரை/xml; charset=utf-8 உள்ளடக்க-நீளம்: 2940

PS முன்பு, Aeroflot இணைய சேவை திறக்கப்பட்டது, ஆனால் 1C 8kuக்கு சோப்பு ஆதரவைச் சேர்த்த பிறகு, 1C பீட்டா சோதனையாளர்கள் அதை வெற்றிகரமாக நிறுவினர். இப்போது அங்கு ஏதோ மாறிவிட்டது (எனக்கு முகவரி தெரியாது, நீங்கள் ஆர்வமாக இருந்தால் அதைப் பார்க்கலாம்).
ZZY மறுப்பு. அவர் தினசரி அளவில் பேசினார். நீங்கள் உதைக்கலாம்.

காட்சிகள்