ലളിതമായ ഒബ്ജക്റ്റ് ആക്സസ് പ്രോട്ടോക്കോൾ (SOAP) - പൊതുവായ വിവരണം. SOAP പ്രോട്ടോക്കോൾ. അടിസ്ഥാന സങ്കൽപങ്ങൾ. SOAP സന്ദേശ ഘടന

ഗാനരചനാ ഭാഗം.

പുറത്ത് നിന്ന് ആക്‌സസ് ചെയ്യാൻ കഴിയുന്ന ഒരു പ്രത്യേക സംവിധാനം നിങ്ങൾ നടപ്പിലാക്കി അല്ലെങ്കിൽ നടപ്പിലാക്കുകയാണെന്ന് സങ്കൽപ്പിക്കുക. ആ. നിങ്ങൾ ആശയവിനിമയം നടത്തേണ്ട ഒരു പ്രത്യേക സെർവർ ഉണ്ട്. ഉദാഹരണത്തിന് ഒരു വെബ് സെർവർ.

ഈ സെർവറിന് നിരവധി പ്രവർത്തനങ്ങൾ നടത്താനും ഡാറ്റാബേസിൽ പ്രവർത്തിക്കാനും മറ്റ് സെർവറുകളിലേക്ക് ചില മൂന്നാം കക്ഷി അഭ്യർത്ഥനകൾ നടത്താനും ചില കണക്കുകൂട്ടലുകൾ നടത്താനും കഴിയും. അവനറിയാവുന്ന സാഹചര്യത്തിനനുസരിച്ച് ജീവിക്കുകയും വികസിപ്പിക്കുകയും ചെയ്യുക (അതായത് ഡവലപ്പർമാരുടെ സാഹചര്യം അനുസരിച്ച്). ഒരു വ്യക്തിക്ക് അത്തരം ഒരു സെർവറുമായി ആശയവിനിമയം നടത്തുന്നത് രസകരമല്ല, കാരണം ചിത്രങ്ങളും മറ്റ് ഉപയോക്തൃ-സൗഹൃദ ഉള്ളടക്കവും ഉള്ള മനോഹരമായ പേജുകൾ നൽകാൻ അയാൾക്ക് കഴിയണമെന്നില്ല/ആഗ്രഹിക്കണമെന്നില്ല. ഇത് എഴുതുകയും പ്രവർത്തിക്കുകയും പ്രവർത്തിക്കുകയും ആവശ്യപ്പെടുമ്പോൾ ഡാറ്റ നൽകുകയും ചെയ്യുന്നു, ഇത് മനുഷ്യർക്ക് വായിക്കാവുന്നതാണെന്ന ആശങ്കയില്ലാതെ, ക്ലയൻ്റ് അത് സ്വയം കൈകാര്യം ചെയ്യും.

മറ്റ് സിസ്റ്റങ്ങൾക്ക്, ഈ സെർവർ ആക്സസ് ചെയ്യുന്നത്, ഈ സെർവറിൽ നിന്ന് ലഭിച്ച ഡാറ്റ അവരുടെ സ്വന്തം വിവേചനാധികാരത്തിൽ ഇതിനകം തന്നെ വിനിയോഗിക്കാൻ കഴിയും - പ്രോസസ്സ് ചെയ്യുക, ശേഖരിക്കുക, അവരുടെ ക്ലയൻ്റുകൾക്ക് വിതരണം ചെയ്യുക തുടങ്ങിയവ.

ശരി, അത്തരം സെർവറുകളുമായി ആശയവിനിമയം നടത്തുന്നതിനുള്ള ഓപ്ഷനുകളിലൊന്ന് SOAP ആണ്. SOAP xml സന്ദേശ കൈമാറ്റ പ്രോട്ടോക്കോൾ.

പ്രായോഗിക ഭാഗം.

ഒരു വെബ് സേവനം (സെർവർ നൽകുന്നതിൻ്റെയും ക്ലയൻ്റുകൾ ഉപയോഗിക്കുന്നതിൻ്റെയും പേരാണ് ഇത്) വ്യക്തമായ ഘടനാപരമായ സന്ദേശങ്ങൾ ഉപയോഗിച്ച് സെർവറുമായി ആശയവിനിമയം നടത്തുന്നത് സാധ്യമാക്കുന്നു. വെബ് സേവനം ഒരു ഡാറ്റയും സ്വീകരിക്കുന്നില്ല എന്നതാണ് വസ്തുത. നിയമങ്ങൾ പാലിക്കാത്ത ഏത് സന്ദേശത്തിനും വെബ് സേവനം ഒരു പിശകോടെ പ്രതികരിക്കും. പിശക്, വഴിയിൽ, വ്യക്തമായ ഘടനയുള്ള xml രൂപത്തിലും ആയിരിക്കും (സന്ദേശത്തിൻ്റെ വാചകത്തെക്കുറിച്ച് ഇത് ശരിയല്ല).

WSDL (വെബ് സേവന വിവരണ ഭാഷ). വെബ് സേവനത്തിനായി സന്ദേശങ്ങൾ രചിക്കുന്ന നിയമങ്ങളും xml ഉപയോഗിച്ച് വിവരിച്ചിരിക്കുന്നു കൂടാതെ വ്യക്തമായ ഘടനയും ഉണ്ട്. ആ. ഒരു വെബ് സേവനം ഒരു രീതിയെ വിളിക്കാനുള്ള കഴിവ് നൽകുന്നുവെങ്കിൽ, ഈ രീതിക്ക് എന്ത് പാരാമീറ്ററുകളാണ് ഉപയോഗിക്കുന്നതെന്ന് അറിയാൻ അത് ക്ലയൻ്റുകളെ അനുവദിക്കണം. Method1 എന്നതിനായുള്ള ഒരു സ്ട്രിംഗ് ഒരു പാരാമീറ്ററായി വെബ് സേവനം പ്രതീക്ഷിക്കുകയും സ്ട്രിംഗിന് Param1 എന്ന് പേരിടുകയും ചെയ്താൽ, വെബ് സേവന വിവരണത്തിൽ ഈ നിയമങ്ങൾ വ്യക്തമാക്കും.

ലളിതമായ തരങ്ങൾ മാത്രമല്ല, ഒബ്‌ജക്‌റ്റുകളും ഒബ്‌ജക്‌റ്റുകളുടെ ശേഖരങ്ങളും പാരാമീറ്ററുകളായി കൈമാറാൻ കഴിയും. ഒരു വസ്തുവിൻ്റെ വിവരണം ഒബ്ജക്റ്റിൻ്റെ ഓരോ ഘടകത്തിൻ്റെയും വിവരണത്തിലേക്ക് വരുന്നു. ഒരു ഒബ്‌ജക്‌റ്റിൽ നിരവധി ഫീൽഡുകൾ അടങ്ങിയിട്ടുണ്ടെങ്കിൽ, ഓരോ ഫീൽഡും വിവരിച്ചിരിക്കുന്നു, അതിൻ്റെ തരം, പേര് (സാധ്യമായ മൂല്യങ്ങൾ എന്തൊക്കെയാണ്). ഫീൽഡുകളും സങ്കീർണ്ണമായ തരത്തിലാകാം, കൂടാതെ തരങ്ങളുടെ വിവരണം ലളിതമായവയിൽ അവസാനിക്കുന്നതുവരെ - സ്ട്രിംഗ്, ബൂളിയൻ, നമ്പർ, തീയതി... എന്നിരുന്നാലും, ചില പ്രത്യേക തരങ്ങൾ ലളിതമായി മാറിയേക്കാം, ക്ലയൻ്റുകൾ പ്രധാനമാണ് അവയിൽ അടങ്ങിയിരിക്കുന്ന മൂല്യങ്ങൾ എന്താണെന്ന് മനസ്സിലാക്കാൻ കഴിയും.

ക്ലയൻ്റുകൾക്ക്, വെബ് സേവനത്തിൻ്റെ url അറിഞ്ഞാൽ മതി; wsdl എല്ലായ്പ്പോഴും സമീപത്തായിരിക്കും, അതിൽ നിന്ന് ഈ വെബ് സേവനം നൽകുന്ന രീതികളെയും അവയുടെ പാരാമീറ്ററുകളെയും കുറിച്ച് നിങ്ങൾക്ക് ഒരു ആശയം ലഭിക്കും.

ഈ മണികളുടെയും വിസിലുകളുടെയും ഗുണങ്ങൾ എന്തൊക്കെയാണ്:

  • മിക്ക സിസ്റ്റങ്ങളിലും, രീതികളുടെയും തരങ്ങളുടെയും വിവരണം സ്വയമേവ സംഭവിക്കുന്നു. ആ. സെർവറിലെ പ്രോഗ്രാമർ ഈ രീതി ഒരു വെബ് സേവനത്തിലൂടെ വിളിക്കാമെന്നും wsdl വിവരണം സ്വയമേവ ജനറേറ്റുചെയ്യുമെന്നും പറയേണ്ടതുണ്ട്.
  • വ്യക്തമായ ഘടനയുള്ള വിവരണം ഏത് സോപ്പ് ക്ലയൻ്റിനും വായിക്കാനാകും. ആ. ഏത് വെബ് സേവനമായാലും, വെബ് സേവനത്തിന് എന്ത് ഡാറ്റയാണ് ലഭിക്കുന്നതെന്ന് ക്ലയൻ്റ് മനസ്സിലാക്കും. ഈ വിവരണം ഉപയോഗിച്ച്, ക്ലയൻ്റിന് ഒബ്ജക്റ്റ് ക്ലാസുകളുടെ സ്വന്തം ആന്തരിക ഘടന നിർമ്മിക്കാൻ കഴിയും, വിളിക്കപ്പെടുന്നവ. ബൈൻഡിംഗ്" കൂടാതെ. തൽഫലമായി, വെബ് സേവനം ഉപയോഗിക്കുന്ന പ്രോഗ്രാമർ ഇതുപോലെ എന്തെങ്കിലും എഴുതേണ്ടതുണ്ട് (സ്യൂഡോകോഡ്):

    NewUser:=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 -age=0 ഉള്ളടക്ക-തരം: വാചകം/xml; charset=utf-8 ഉള്ളടക്ക-ദൈർഘ്യം: 2940

PS മുമ്പ്, Aeroflot വെബ് സേവനം തുറന്നിരുന്നു, എന്നാൽ 1C 8ku-ലേക്ക് സോപ്പ് പിന്തുണ ചേർത്തതിന് ശേഷം, ഒരു കൂട്ടം 1C ബീറ്റ ടെസ്റ്ററുകൾ അത് വിജയകരമായി ഇൻസ്റ്റാൾ ചെയ്തു. ഇപ്പോൾ അവിടെ എന്തോ മാറ്റം വന്നിട്ടുണ്ട് (എനിക്ക് വിലാസം അറിയില്ല, നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടെങ്കിൽ അത് നോക്കാം).
ZZY നിരാകരണം. അദ്ദേഹം ദൈനംദിന തലത്തിൽ സംസാരിച്ചു. നിങ്ങൾക്ക് ചവിട്ടാം.

എന്താണ് സോപ്പ്?

SOAP എന്നാൽ ലളിതമായ ഒബ്ജക്റ്റ് ആക്സസ് പ്രോട്ടോക്കോൾ. ലേഖനം വായിച്ചതിനുശേഷം നിങ്ങൾ ആശ്ചര്യപ്പെടുമെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു: "എന്താണ് ഈ വിചിത്രമായ പേര്?"

SOAP അതിൻ്റെ നിലവിലെ രൂപത്തിൽ ഒരു നെറ്റ്‌വർക്കിലൂടെയുള്ള വിദൂര നടപടിക്രമ കോൾ (RPC) രീതിയാണ്. (അതെ, XML ആയി ഡോക്യുമെൻ്റുകൾ കൈമാറാനും ഇത് ഉപയോഗിക്കുന്നു, പക്ഷേ ഞങ്ങൾ അത് ഇപ്പോൾ ഉപേക്ഷിക്കും.)

നമുക്ക് അത് കണ്ടുപിടിക്കാം. തന്നിരിക്കുന്ന ടിക്കറിന് (സ്റ്റോക്ക് ചിഹ്നം) സ്റ്റോക്ക് ഉദ്ധരണി നൽകുന്ന ഒരു സേവനം നിങ്ങൾക്കുണ്ടെന്ന് സങ്കൽപ്പിക്കുക. ഇത് നാസ്ഡാക്ക് വെബ്‌സൈറ്റിലേക്ക് ഡാറ്റ അയയ്‌ക്കുകയും തിരികെ നൽകിയ HTML അടിസ്ഥാനമാക്കി ആവശ്യമുള്ള ഫലം സൃഷ്‌ടിക്കുകയും ചെയ്യുന്നു. അടുത്തതായി, മറ്റ് ഡെവലപ്പർമാരെ അവരുടെ ആപ്ലിക്കേഷനുകൾക്കുള്ളിൽ ഇത് ഉപയോഗിക്കാൻ അനുവദിക്കുന്നതിന്, ഇൻ്റർനെറ്റ് വഴി ഉദ്ധരണികളെക്കുറിച്ചുള്ള വിവരങ്ങൾ കണ്ടെത്തുന്ന ഒരു ഘടകം നിങ്ങൾ ഈ സേവനത്തിൽ നിന്ന് ഉണ്ടാക്കുന്നു. ഒരു ദിവസം നാസ്ഡാക്ക് അതിൻ്റെ പേജുകളുടെ ലേഔട്ട് മാറ്റുന്നത് വരെ ഇത് മികച്ച രീതിയിൽ പ്രവർത്തിക്കുന്നു. ഘടകത്തിൻ്റെ മുഴുവൻ യുക്തിയും നിങ്ങൾ പുനർവിചിന്തനം ചെയ്യുകയും അത് ഉപയോഗിക്കുന്ന എല്ലാ ഡവലപ്പർമാർക്കും അപ്ഡേറ്റുകൾ അയയ്ക്കുകയും വേണം. കൂടാതെ, അവർ അവരുടെ എല്ലാ ഉപയോക്താക്കൾക്കും അപ്‌ഡേറ്റുകൾ അയയ്‌ക്കേണ്ടതുണ്ട്. ഇത് കൂടുതലോ കുറവോ സ്ഥിരമായി സംഭവിക്കുകയാണെങ്കിൽ, നിങ്ങളുടെ സഹ ഡെവലപ്പർമാർക്കിടയിൽ നിങ്ങൾക്ക് ധാരാളം ശത്രുക്കളെ സൃഷ്ടിക്കാൻ കഴിയും. പ്രോഗ്രാമർമാർ, നിങ്ങൾക്കറിയാവുന്നതുപോലെ, നിസ്സാരമല്ല. നാളെ ഓഫീസ് ഷ്രെഡറിൽ നിന്ന് നിങ്ങളുടെ പ്രിയപ്പെട്ട പൂച്ചയുടെ ഫോട്ടോ എടുക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നില്ല, അല്ലേ?

എന്തുചെയ്യും? നമുക്ക് നോക്കാം... ടിക്കർ ചിഹ്നം (തരം സ്ട്രിംഗ്) ഇൻപുട്ടായി എടുത്ത് ഒരു സ്റ്റോക്ക് ഉദ്ധരണി (തരം ഫ്ലോട്ട് അല്ലെങ്കിൽ ഇരട്ടി) തിരികെ നൽകുന്ന ഒരു ഫംഗ്‌ഷൻ നൽകിയാൽ മതി. അതിനാൽ നിങ്ങളുടെ ഡവലപ്പർമാരെ എങ്ങനെയെങ്കിലും ഇൻ്റർനെറ്റിലൂടെ ഈ ഫംഗ്‌ഷൻ വിളിക്കാൻ അനുവദിക്കുന്നത് എളുപ്പമല്ലേ? കൊള്ളാം! എനിക്കും വാർത്തയുണ്ട്, വർഷങ്ങളായി ഇത് ചെയ്യുന്ന COM, കോർബ, ജാവ എന്നിവയുണ്ട്... ഇത് സത്യമാണ്, പക്ഷേ ഈ രീതികൾ കുറവുകളല്ല. റിമോട്ട് COM കോൺഫിഗറേഷൻ നിസ്സാരമല്ല. കൂടാതെ, ഒരു സിസ്റ്റം അഡ്മിനിസ്ട്രേറ്റർക്ക് മതിയായ ബിയർ കൈകാര്യം ചെയ്യാൻ കഴിയാത്ത വിധത്തിൽ നിങ്ങൾ ഫയർവാളിൽ നിരവധി പോർട്ടുകൾ തുറക്കേണ്ടതുണ്ട്. അതെ, വിൻഡോസ് ഒഴികെയുള്ള എല്ലാ ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളുടെയും ഉപയോക്താക്കളെ കുറിച്ച് നിങ്ങൾ മറക്കേണ്ടി വരും. എന്നാൽ ലിനക്സ് ഉപയോക്താക്കൾക്കും ചിലപ്പോൾ എക്സ്ചേഞ്ചിൽ താൽപ്പര്യമുണ്ട്.

ലിനക്സ് ഉപയോക്താക്കൾ DCOM ഉപയോഗിക്കുകയാണെങ്കിൽ, അവർക്ക് എല്ലാം നഷ്‌ടമാകില്ലെന്ന് തോന്നുമെങ്കിലും, കൂടുതൽ ഇവിടെ: http://www.idevresource.com/com/library/res/articles/comonlinux.asp.

കോർബയെയും ജാവയെയും കുറിച്ച് എനിക്ക് കൂടുതൽ പറയാൻ കഴിയില്ല, അതിനാൽ ഈ സമീപനങ്ങളിലെ ദോഷങ്ങൾ കണ്ടെത്താൻ ഞാൻ വായനക്കാരെ ക്ഷണിക്കുന്നു.

അത്തരമൊരു റിമോട്ട് കോളും ഫലം നൽകുന്ന ഫോമും വിവരിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്ന ഒരു മാനദണ്ഡമാണ് SOAP. അതിനാൽ നെറ്റ്‌വർക്കിലൂടെ ആക്‌സസ് ചെയ്യാവുന്ന ഒരു ആപ്ലിക്കേഷനിൽ നിങ്ങളുടെ ഫംഗ്‌ഷൻ ഹോസ്റ്റ് ചെയ്യുകയും SOAP പാക്കറ്റുകളായി കോളുകൾ സ്വീകരിക്കുകയും വേണം. തുടർന്ന് നിങ്ങൾ ഇൻപുട്ട് സാധൂകരിക്കുകയും നിങ്ങളുടെ ഫംഗ്‌ഷൻ പ്രവർത്തിപ്പിക്കുകയും ഫലം ഒരു പുതിയ SOAP പാക്കറ്റിൽ നൽകുകയും ചെയ്യുന്നു. മുഴുവൻ പ്രക്രിയയും HTTP-യിൽ പ്രവർത്തിക്കാൻ കഴിയും, അതിനാൽ നിങ്ങളുടെ ഫയർവാളിൽ ഒരു കൂട്ടം പോർട്ടുകൾ തുറക്കേണ്ടതില്ല. ഇത് ശരിക്കും ലളിതമാണോ?

ഈ ലേഖനം എന്തിനെക്കുറിച്ചാണ്?

അഗ്നി സോഫ്‌റ്റ്‌വെയറിൽ സോപ്പിനെക്കുറിച്ച് ഞങ്ങൾ എഴുതുന്ന ലേഖനങ്ങളുടെ പരമ്പരയിലെ ആദ്യത്തേതാണ് ഇത്. ഈ ലേഖനത്തിൽ SOAP എന്താണെന്നും ഒരു SOAP സെർവറുമായി ആശയവിനിമയം നടത്തുന്ന ഒരു ആപ്ലിക്കേഷൻ എങ്ങനെ എഴുതാമെന്നും നിങ്ങൾക്ക് ഒരു ആശയം നൽകാൻ ഞാൻ ശ്രമിക്കും.

സോപ്പും XML

SOAP ഇപ്പോഴും നിങ്ങൾക്ക് ലളിതമാണെന്ന് തോന്നുന്നുവെങ്കിൽ, നമുക്ക് XML ചേർക്കാം. ഇപ്പോൾ, ഫംഗ്‌ഷൻ നാമത്തിനും പാരാമീറ്ററുകൾക്കും പകരം, നിങ്ങളെ ആശയക്കുഴപ്പത്തിലാക്കാൻ രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നതുപോലെ, ഞങ്ങൾക്ക് വളരെ സങ്കീർണ്ണമായ ഒരു XML എൻവലപ്പ് ലഭിക്കുന്നു. എന്നാൽ ഭയപ്പെടാൻ തിരക്കുകൂട്ടരുത്. അതിലും കൂടുതൽ ഉണ്ട്, കൂടാതെ SOAP ൻ്റെ സങ്കീർണ്ണതയെ അഭിനന്ദിക്കാൻ നിങ്ങൾ മുഴുവൻ ചിത്രവും കാണേണ്ടതുണ്ട്.
XML എന്താണെന്ന് നിങ്ങൾക്ക് അറിയില്ലെങ്കിൽ, ആദ്യം XML-നെക്കുറിച്ചുള്ള എൻ്റെ ലേഖനം ഇവിടെ വായിക്കുക: http://www.agnisoft.com/white_papers/xml_delphi.asp.

എല്ലാ SOAP പാക്കേജുകളും XML ഫോർമാറ്റിലാണ്. എന്താണ് ഇതിനർത്ഥം? നമുക്ക് കാണാം. ഈ ഫംഗ്ഷൻ നോക്കുക (പാസ്കൽ):
ഫംഗ്ഷൻ GetStockQuote(ചിഹ്നം: സ്ട്രിംഗ്) : ഇരട്ട; ഇത് വളരെ മികച്ചതായി തോന്നുന്നു, പക്ഷേ പ്രശ്നം അത് പാസ്കൽ ആണ്. ഒരു ജാവ ഡെവലപ്പർക്ക് ഈ ലളിതമായ നിർവചനത്തിൻ്റെ ഉപയോഗം എന്താണ്? അതോ VB യുടെ കൂടെ ജോലി ചെയ്യുന്ന ഒരാൾക്ക് വേണ്ടിയോ? VB പ്രോഗ്രാമർമാർക്ക് പോലും എല്ലാവർക്കും മനസ്സിലാകുന്ന ഒന്ന് ഞങ്ങൾക്ക് ആവശ്യമാണ്. അതിനാൽ അവർക്ക് ഒരേ വിവരങ്ങൾ അടങ്ങിയ XML നൽകുക (പാരാമീറ്ററുകൾ, സ്റ്റോക്ക് ഉദ്ധരണി മൂല്യങ്ങൾ മുതലായവ). നിങ്ങൾ ഒരു SOAP പാക്കേജ് സൃഷ്‌ടിക്കുന്നു, അത് നിങ്ങളുടെ ഫംഗ്‌ഷനിലേക്കുള്ള ഒരു കോൾ ആണ്, അത് XML-ൽ പൊതിഞ്ഞ് ഏത് പ്ലാറ്റ്‌ഫോമിലെയും ഏത് ആപ്ലിക്കേഷനും അത് മനസ്സിലാക്കാൻ കഴിയും. ഇനി നമ്മുടെ SOAP കോൾ എങ്ങനെയുണ്ടെന്ന് നോക്കാം:
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">


ഐ.ബി.എം


വിജ്ഞാനപ്രദം, അല്ലേ? സോപ്പ് നമ്മുടെ കൺമുന്നിൽ എളുപ്പമായിക്കൊണ്ടിരിക്കുകയാണ്. ശരി, തമാശകൾ മാറ്റിവെക്കുക. ഈ SOAP കോൾ എങ്ങനെ മനസ്സിലാക്കാമെന്ന് ഇപ്പോൾ ഞാൻ നിങ്ങളോട് വിശദീകരിക്കാൻ ശ്രമിക്കും.

ടാഗ് ഡീകോഡിംഗ്

നിങ്ങളുടെ ശ്രദ്ധ ആകർഷിക്കുന്ന ആദ്യത്തെ ടാഗ് . ഈ ടാഗ് ഒരു SOAP പാക്കേജിൻ്റെ പുറം റാപ്പറാണ്, അതിൽ ഞങ്ങൾക്ക് പ്രത്യേക താൽപ്പര്യമില്ലാത്ത നിരവധി നെയിംസ്പേസ് ഡിക്ലറേഷനുകൾ അടങ്ങിയിരിക്കുന്നു, എന്നാൽ ഏത് പ്രോഗ്രാമിംഗ് ഭാഷയ്ക്കും പാർസറിനും വളരെ പ്രധാനമാണ്. "SOAP-ENV:" അല്ലെങ്കിൽ "xsd:" പോലുള്ള തുടർന്നുള്ള പ്രിഫിക്‌സുകൾ പാഴ്‌സർ മനസ്സിലാക്കുന്നുവെന്ന് ഉറപ്പാക്കാനാണ് നെയിംസ്‌പെയ്‌സുകൾ നിർവചിച്ചിരിക്കുന്നത്.

അടുത്ത ടാഗ് - . (ഇവിടെ കാണിക്കാത്ത ഒരു ടാഗ് ഞങ്ങൾക്ക് നഷ്‌ടമായി - . ഇത് ഈ പ്രത്യേക ഉദാഹരണത്തിൽ ഇല്ല, എന്നാൽ നിങ്ങൾക്ക് ഇതിനെക്കുറിച്ച് കൂടുതൽ വായിക്കണമെങ്കിൽ, ഇവിടെ SOAP സ്പെസിഫിക്കേഷൻ പരിശോധിക്കുക: http://www.w3.org/TR/SOAP/). ടാഗ് ചെയ്യുക യഥാർത്ഥത്തിൽ ഒരു SOAP കോൾ അടങ്ങിയിരിക്കുന്നു.

ലിസ്റ്റിലെ അടുത്ത ടാഗ് ഇതാണ് . ടാഗ് നാമം, GetStockQuote, ഫംഗ്‌ഷനെ വിളിക്കുന്നു. SOAP ടെർമിനോളജിയിൽ, ഇതിനെ ഒരു ഓപ്പറേഷൻ എന്ന് വിളിക്കുന്നു. അങ്ങനെ ചെയ്യേണ്ട പ്രവർത്തനമാണ് GetStockQuote. ns1 എന്നത് നമ്മുടെ കാര്യത്തിൽ urn:xmethods-quotes-ലേക്ക് ചൂണ്ടിക്കാണിക്കുന്ന നെയിംസ്പേസ് ആണ്.

നെയിംസ്പേസുകളെക്കുറിച്ചുള്ള ഒരു കുറിപ്പ്: ഒരു എക്സ്എംഎൽ ടാഗ് യോഗ്യത നേടുന്നത് ഒരു നെയിംസ്പേസ് സാധ്യമാക്കുന്നു. ഉദാഹരണത്തിന്, നിങ്ങൾക്ക് ഒരു നടപടിക്രമത്തിൽ ഒരേ പേരിലുള്ള രണ്ട് വേരിയബിളുകൾ ഉണ്ടാകാൻ കഴിയില്ല, എന്നാൽ അവ രണ്ട് വ്യത്യസ്ത നടപടിക്രമങ്ങളിലാണെങ്കിൽ, ഒരു പ്രശ്നവുമില്ല. അങ്ങനെ, ഒരു നടപടിക്രമം ഒരു നെയിംസ്പേസ് ആണ്, കാരണം അതിലെ എല്ലാ പേരുകളും അദ്വിതീയമാണ്. അതുപോലെ, XML ടാഗുകൾക്ക് നെയിംസ്‌പെയ്‌സിനുള്ളിൽ അവയുടെ വ്യാപ്തിയുണ്ട്, അതിനാൽ ഒരു നെയിംസ്‌പെയ്‌സും ടാഗ് നാമവും നൽകിയാൽ, നിങ്ങൾക്ക് അത് അദ്വിതീയമായി തിരിച്ചറിയാൻ കഴിയും. ഞങ്ങളുടെ NS1-നെ കോപ്പികാറ്റുകളിൽ നിന്ന് വേർതിരിക്കുന്നതിന് ഞങ്ങൾ നെയിംസ്പേസിനെ ഒരു URI ആയി നിർവ്വചിക്കും. മുകളിലുള്ള ഉദാഹരണത്തിൽ, NS1 എന്നത് urn:xmethods-quotes-ലേക്ക് ചൂണ്ടിക്കാണിക്കുന്ന ഒരു അപരനാമമാണ്.

എൻകോഡിംഗ് സ്റ്റൈൽ ആട്രിബ്യൂട്ടിലേക്കും ശ്രദ്ധിക്കുക - ഈ ആട്രിബ്യൂട്ട് SOAP കോൾ എങ്ങനെ സീരിയലൈസ് ചെയ്യപ്പെടുന്നുവെന്ന് നിർണ്ണയിക്കുന്നു.

ഒരു ടാഗിനുള്ളിൽ പരാമീറ്ററുകൾ അടങ്ങിയിരിക്കുന്നു. ഞങ്ങളുടെ ഏറ്റവും ലളിതമായ സാഹചര്യത്തിൽ, ഞങ്ങൾക്ക് ഒരു പാരാമീറ്റർ മാത്രമേയുള്ളൂ - ടാഗ് . ടാഗിന് അടുത്തുള്ള ഈ വരി ശ്രദ്ധിക്കുക:
xsi:type="xsd:string"
XML-ൽ തരങ്ങൾ നിർവചിക്കുന്നത് ഇങ്ങനെയാണ്. (ലേഖനം പ്രസിദ്ധീകരിച്ചുകഴിഞ്ഞാൽ മാറിയേക്കാവുന്ന സാങ്കേതികവിദ്യയെക്കുറിച്ച് ഒരു സാമാന്യവൽക്കരണം നടത്തുമ്പോൾ "ഏകദേശം" എന്ന വാക്ക് ഞാൻ എത്ര സമർത്ഥമായി ഉപയോഗിച്ചുവെന്നത് ശ്രദ്ധിക്കുക.) ഇത് കൃത്യമായി എന്താണ് അർത്ഥമാക്കുന്നത്: xsi നെയിംസ്പേസിൽ നിർവചിച്ചിരിക്കുന്ന ഒരു തരം, ടാഗിൽ നിർവചിച്ചിരിക്കുന്നത് നിങ്ങൾ ശ്രദ്ധിക്കും – xsd:സ്ട്രിംഗ്. ഇത്, xsd നെയിംസ്പേസിൽ നിർവചിച്ചിരിക്കുന്ന സ്ട്രിംഗ് ആണ്, വീണ്ടും, നേരത്തെ നിർവചിച്ചതാണ്. (വക്കീലന്മാർ ഇതെല്ലാം കണ്ട് പുളകിതരാകുമെന്ന് എനിക്ക് ഉറപ്പുണ്ട്).

ഒരു ടാഗിനുള്ളിൽ "IBM" സൂചിപ്പിച്ചിരിക്കുന്നു. GetStockQuote ഫംഗ്‌ഷൻ്റെ ചിഹ്ന പാരാമീറ്ററിൻ്റെ മൂല്യമാണിത്.

ശരി, അവസാനം, മാന്യരായ ആളുകളെപ്പോലെ, ഞങ്ങൾ എല്ലാ ടാഗുകളും അടച്ചു.

അതിനാൽ SOAP സെർവറിലേക്കുള്ള കോൾ നിർവചിക്കുന്ന SOAP പാക്കറ്റ് ഞങ്ങൾ കണ്ടെത്തി. കൂടാതെ SOAP സെർവർ, XML പാഴ്‌സറുകളും ചുവന്ന ബട്ടണും MIR സ്‌പേസ് സ്റ്റേഷനും ഉപയോഗിച്ച് ഈ കോൾ ഡീകോഡ് ചെയ്യുകയും നിങ്ങൾക്ക് ഒരു സ്റ്റോക്ക് ഉദ്ധരണി ആവശ്യമാണെന്ന് നിർണ്ണയിക്കുകയും ചെയ്യുന്നു. അവൻ ഉടൻ തന്നെ ശരിയായ ഉദ്ധരണി കണ്ടെത്തുകയും ഈ ഫോമിൽ അത് നിങ്ങൾക്ക് തിരികെ നൽകുകയും ചെയ്യുന്നു:
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>


34.5


SOAP കവർ അഴിച്ച്, റിബണുകൾ വലിച്ചുകീറി, റാപ്പർ തുരുമ്പെടുക്കുമ്പോൾ, IBM ഓഹരി വില 34.5 ആണെന്ന് ഞങ്ങൾ മനസ്സിലാക്കുന്നു.

ഒട്ടുമിക്ക വാണിജ്യ സെർവറുകളും, അവസാനത്തെ സ്റ്റോക്ക് ഏത് നാണയത്തിലാണ്, ഏത് വിലയിലാണ് വാങ്ങിയത് തുടങ്ങിയ കൂടുതൽ വിവരങ്ങൾ തിരികെ നൽകും. ഷെയർ വില, ഒരുപക്ഷേ, കൂടുതൽ കൃത്യമായിരിക്കുമായിരുന്നു.

ഇതുവഴി SOAP സെർവർ എന്താണ് പ്രതീക്ഷിക്കുന്നതെന്നും അത് എന്ത് തിരികെ നൽകുമെന്നും നമുക്കറിയാം. അപ്പോൾ നിങ്ങൾ എങ്ങനെയാണ് ഈ വിവരങ്ങൾ അയയ്ക്കുന്നത്? നിങ്ങൾക്ക് ഏത് ഗതാഗതവും ഉപയോഗിക്കാം. ഏറ്റവും കൂടുതൽ കവർ ചെയ്യുന്നത് HTTP ആണ്. HTTP-യെ കുറിച്ച് ഞാൻ വിശദമായി പറയില്ല, അറിയാത്തവർക്കായി, നിങ്ങൾ സന്ദർശിക്കുന്ന സൈറ്റുകളുമായി ആശയവിനിമയം നടത്താൻ നിങ്ങളുടെ ബ്രൗസർ ഉപയോഗിക്കുന്നത് ഇതാണ്.

ആവശ്യമായ HTTP അഭ്യർത്ഥന ഇതുപോലെ കാണപ്പെടും:
POST /StockQuote HTTP/1.1
ഹോസ്റ്റ്: www.stockquoteserver.com

ഉള്ളടക്ക ദൈർഘ്യം: nnnn
SOAPAction: "Some-URI"

സോപ്പ് അഭ്യർത്ഥന പാക്കറ്റ് ഇവിടെയുണ്ട്... ശ്രദ്ധിക്കേണ്ട ഒരേയൊരു കാര്യം SOAPAction തലക്കെട്ടാണ്. ഈ തലക്കെട്ട് അഭ്യർത്ഥനയുടെ ഉദ്ദേശ്യത്തെ സൂചിപ്പിക്കുന്നു, അത് ആവശ്യമാണ്. ഓരോ SOAP സെർവറിനും പരിധിയില്ലാത്ത ഫംഗ്‌ഷനുകൾ ഉണ്ടായിരിക്കാം, കൂടാതെ ഏത് ഫംഗ്‌ഷനെ വിളിക്കണമെന്ന് നിർണ്ണയിക്കാൻ SOAPAction തലക്കെട്ട് ഉപയോഗിക്കാനും കഴിയും. ഫയർവാളുകൾക്കും മൾട്ടിപ്ലക്സറുകൾക്കും ഈ തലക്കെട്ടിനെ അടിസ്ഥാനമാക്കി ഉള്ളടക്കം ഫിൽട്ടർ ചെയ്യാനാകും.

HTTP സെർവറിൽ നിന്നുള്ള SOAP പ്രതികരണം ഇതുപോലെ കാണപ്പെടും:
HTTP/1.1 200 ശരി
ഉള്ളടക്ക-തരം: വാചകം/xml; charset="utf-8"
ഉള്ളടക്ക ദൈർഘ്യം: nnnn

സോപ്പ് റെസ്‌പോൺസ് പാക്കറ്റ് ഇവിടെ... എന്തുകൊണ്ട് HTTP? ആദ്യം, നെറ്റ്‌വർക്ക് അഡ്മിനിസ്ട്രേറ്റർമാർക്ക് SOAP കോളുകൾക്കായി ഒരു ടൺ പ്രത്യേക പോർട്ടുകൾ തുറക്കേണ്ടതില്ല... വെബ് സെർവറിന് കോളുകൾ എളുപ്പത്തിൽ കൈകാര്യം ചെയ്യാൻ കഴിയും, കാരണം ഇൻകമിംഗ് അഭ്യർത്ഥനകൾ സ്വീകരിക്കുന്നതിന് പോർട്ട് 80 സാധാരണയായി എല്ലാവർക്കും തുറന്നിരിക്കും. CGI, ISAPI, മറ്റ് നേറ്റീവ് മൊഡ്യൂളുകൾ എന്നിവ ഉപയോഗിക്കുന്ന വെബ് സെർവറുകളുടെ വിപുലീകരണമാണ് മറ്റൊരു നേട്ടം. മറ്റ് വെബ് ഉള്ളടക്കങ്ങളെ ബാധിക്കാതെ SOAP അഭ്യർത്ഥനകൾ പ്രോസസ്സ് ചെയ്യുന്ന ഒരു മൊഡ്യൂൾ എഴുതാൻ ഈ വിപുലീകരണം നിങ്ങളെ അനുവദിക്കുന്നു.

അത്രയേയുള്ളൂ

ഈ ലേഖനം SOAP-നെ കുറിച്ച് കുറച്ച് വെളിച്ചം വീശുമെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു. നിങ്ങൾ ഇപ്പോഴും ഇവിടെയുണ്ടെങ്കിൽ, ഈ വിഷയത്തെക്കുറിച്ച് കൂടുതൽ വായിക്കാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, രചയിതാക്കളുടെ വെബ്സൈറ്റ് സന്ദർശിക്കുക: http://www.agnisoft.com/soap

പൊതുവേ, ഇന്ന് സാധാരണ XML ഡാറ്റാ എക്സ്ചേഞ്ച് പ്രോട്ടോക്കോളുകൾ ഉണ്ട്:

  • XML-RPC- നിങ്ങൾ പാക്കേജ് പാസാക്കി സെർവറിലെ ഏത് രീതിയാണ് നിങ്ങൾ വിളിക്കേണ്ടതെന്ന് സൂചിപ്പിക്കുക.
  • വിശ്രമിക്കുക- സെർവറിൽ ചില വസ്തുക്കൾ ഉണ്ട്. ഓരോ വസ്തുവിനും ഒരുതരം ഐഡൻ്റിഫയർ ഉണ്ട്. ഓരോ ഘടകത്തിനും അതിൻ്റേതായ url ഉണ്ട്. ഏത് ഘടകവും ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഇനിപ്പറയുന്നവ ചെയ്യാൻ കഴിയും: തിരുകുക, ഇല്ലാതാക്കുക, അപ്ഡേറ്റ് ചെയ്യുക, തിരഞ്ഞെടുക്കുക. നിങ്ങൾ സെർവറിലേക്ക് ആവശ്യമുള്ള അഭ്യർത്ഥന അയയ്‌ക്കുക (ഉദാഹരണത്തിന്, അത്തരം ഒരു ഘടകം ചേർക്കുക). ക്ലയൻ്റ്-സെർവർ എക്സ്ചേഞ്ച് JSON അല്ലെങ്കിൽ XML അടിസ്ഥാനമാക്കിയുള്ളതാണ്.

SOAP (സർവീസ് ഓറിയൻ്റഡ് ആർക്കിടെക്ചർ, പരസ്പരം ഇടപഴകുന്ന ഒരു കൂട്ടം അയഞ്ഞ കപ്പിൾഡ് സേവനങ്ങൾ) RPC അടിസ്ഥാനമാക്കിയുള്ളതാണ്. RPC യുടെ പ്രധാന നേട്ടം നെറ്റ്വർക്ക് റിസോഴ്സുകളുടെ ചെറിയ എണ്ണം (എൻട്രി പോയിൻ്റുകൾ), ഉൾപ്പെട്ടിരിക്കുന്ന നിരവധി രീതികൾ എന്നിവയാണ്. ഈ നേട്ടം ഉണ്ടായിരുന്നിട്ടും, RPC കാലഹരണപ്പെട്ട ഒരു പ്രോട്ടോക്കോൾ ആണ്, അതിന് നിരവധി ദോഷങ്ങളുമുണ്ട്:

  • ഒരു XML-RPC സന്ദേശത്തിൻ്റെ സാധുത പരിശോധിക്കാൻ കഴിയില്ല. XML-ൽ സ്കീമകൾ (ഡാറ്റ സാധൂകരിക്കുന്നതിനുള്ള രീതികൾ) സ്റ്റാൻഡേർഡ് ചെയ്യുന്നതിനുമുമ്പ് പഴയ പ്രോട്ടോക്കോൾ സൃഷ്ടിച്ചു. ആ. സെർവർ അഭ്യർത്ഥനകൾ സ്വീകരിക്കുന്നു, അഭ്യർത്ഥനകൾ അതിനുള്ളതാണെന്നും ഡാറ്റ സ്ഥിരതയുള്ളതാണെന്നും അത് ഉറപ്പാക്കണം. XML-RPC-യിൽ, ഇതിനായി ഡാറ്റ തരങ്ങൾ പ്രഖ്യാപിക്കപ്പെടുന്നു, പക്ഷേ ഇതൊരു ഡാറ്റാ തരം പരിശോധനയാണ്, കൂടാതെ ഡാറ്റാ സ്ഥിരത പരിശോധിക്കില്ല (ആവശ്യമായ എല്ലാ പാരാമീറ്ററുകളുമുള്ള ഒരു ഘടന നിങ്ങൾക്ക് ലഭിച്ചുവെന്ന്).
  • നിങ്ങൾക്ക് സംയോജിത സന്ദേശങ്ങൾ സൃഷ്ടിക്കാൻ കഴിയില്ല.
  • നിങ്ങൾക്ക് സ്ഥലവും സമയവും ഉപയോഗിക്കാൻ കഴിയില്ല (ആർപിസി സൃഷ്ടിച്ചതിന് ശേഷം പ്രത്യക്ഷപ്പെട്ടു).
  • നിങ്ങൾക്ക് സന്ദേശം വികസിപ്പിക്കാൻ കഴിയില്ല, അതായത്. അധിക വിവരങ്ങൾ ചേർക്കുക.

ഈ പോരായ്മകളെല്ലാം XML സ്കീമയിൽ പരിഹരിച്ചു. XML ഡോക്യുമെൻ്റ് വിവരിക്കുന്നതിനുള്ള വ്യവസായ നിലവാരമാണിത്. ആ. അനിയന്ത്രിതമായ ഡാറ്റ മാതൃകയാക്കുന്നതിനുള്ള ഒരു മാർഗമാണിത്. ഒരു XML സ്കീമയ്ക്ക് ഒരു മോഡൽ (ഘടകങ്ങളും ആട്രിബ്യൂട്ടുകളും തമ്മിലുള്ള ബന്ധങ്ങളും അവയുടെ ഘടനയും), ഡാറ്റ തരങ്ങളും (ഡാറ്റ തരങ്ങളെ വിശേഷിപ്പിക്കുന്നു), ഒരു നിഘണ്ടുവും (ഘടകങ്ങളുടെയും ആട്രിബ്യൂട്ടുകളുടെയും പേരുകൾ) വിവരിക്കാൻ കഴിയും.

XML-RPC യുടെ എല്ലാ പോരായ്മകളെയും അടിസ്ഥാനമാക്കി, SOAP പ്രോട്ടോക്കോൾ സൃഷ്ടിച്ചു.

സോപ്പ്(സിംലി ഒബ്ജക്റ്റ് ആക്സസ് പ്രോട്ടോക്കോൾ) - ഒരു ഒബ്ജക്റ്റിലേക്കുള്ള ആക്സസ് പ്രോട്ടോക്കോൾ (എൻട്രി പോയിൻ്റിലേക്ക്). വിതരണം ചെയ്ത ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കുന്നതിനുള്ള പ്രധാന വ്യവസായ നിലവാരമാണ് ഇന്ന്.

ഇത് XML-RPC ഭാഷയിലേക്കുള്ള വിപുലീകരണങ്ങളെ പ്രതിനിധീകരിക്കുന്നു. ആ. ഇത് തത്വത്തിൽ നിർമ്മിച്ചതാണ്: 1 എൻട്രി പോയിൻ്റും ഏതെങ്കിലും രീതികളും. ഗതാഗതത്തിൻ്റെ കാര്യത്തിൽ പ്രോട്ടോക്കോൾ തന്നെ (ഡാറ്റ കൈമാറുന്നതെങ്ങനെ) വിശാലമായ തിരഞ്ഞെടുപ്പ് നൽകുന്നു: SMTP, FTP, HTTP, MSMQ.

XML വെബ് സേവനങ്ങൾ (XML വെബ് സേവനങ്ങൾ) നടപ്പിലാക്കുന്നതിന് SOAP അടിവരയിടുന്നു. പഠിക്കാൻ ബുദ്ധിമുട്ടാണ് എന്നതാണ് സോപ്പിൻ്റെ പോരായ്മ.

SOAP ഒരു ക്ലയൻ്റും സെർവറും തമ്മിലുള്ള സന്ദേശങ്ങളുടെ കൈമാറ്റത്തെ അടിസ്ഥാനമാക്കിയുള്ളതാണ് (സമന്വയമായും അസമന്വിതമായും). ഓരോ സന്ദേശവും ഡാറ്റയെക്കുറിച്ചുള്ള വിവരങ്ങൾ വഹിക്കുന്നു (ഏത് ഡാറ്റ കൈമാറ്റം ചെയ്യപ്പെടുന്നു, സ്വീകരിക്കുന്നു). XML സ്കീമകൾ ഉപയോഗിച്ച് ഒരു സന്ദേശത്തിൻ്റെ മുഴുവൻ ഘടനയും SOAP മുൻകൂട്ടി വിവരിക്കുന്നു: സന്ദേശത്തിൽ എന്തായിരിക്കണം, അത് എങ്ങനെ കൈമാറും. സെർവർ അറിയാതെ തന്നെ അവിടെ എന്താണ് സംഭവിക്കുന്നതെന്ന് മനസ്സിലാക്കാൻ ഇത് സാധ്യമാക്കുന്നു, ഈ സന്ദേശം അതിനുള്ളതാണോ എന്ന് പരിശോധിക്കാൻ സെർവറിനെ അനുവദിക്കുന്നു.

XML സ്കീമ

ഒരു സ്കീമയുടെ ഉദ്ദേശ്യം ഡാറ്റയുടെ ഘടന വിവരിക്കുക എന്നതാണ്, അതായത്. നമുക്കുള്ളത്. എല്ലാ ഡാറ്റയും ലളിതവും സങ്കീർണ്ണവുമായ തരങ്ങളായി തിരിച്ചിരിക്കുന്നു (സ്കെയിലറുകളും ഘടനകളും). ഒരു ലളിതമായ തരം (സ്ട്രിംഗ്, നമ്പർ, ബൂളിയൻ, തീയതി) ഒരിക്കലും ഉള്ളിൽ ഒന്നും അടങ്ങിയിരിക്കില്ല. ഒരു ഘടനയിൽ (വസ്തു) ഗുണങ്ങൾ അടങ്ങിയിരിക്കാം.

അടിസ്ഥാന സോപ്പ് പ്രവർത്തനങ്ങൾ

  • ലളിതമായ ക്ലയൻ്റ്-സെർവർ വിവര കൈമാറ്റം മാത്രമല്ല. എന്നാൽ ഈ സെർവറിനായുള്ള ഓട്ടോമാറ്റിക് സെർവർ തിരിച്ചറിയലും തിരയലും, അതായത്. ക്ലയൻ്റിന് സെർവറിനെ കുറിച്ച് ഒന്നും അറിയില്ലായിരിക്കാം. ആ. ക്ലയൻ്റ് ആദ്യം സെർവറിനായി തിരയുന്നു, അനുയോജ്യമായ സേവനങ്ങൾ കണ്ടെത്തുന്നു, അവിടെ എന്തൊക്കെ രീതികളാണുള്ളത്, സെർവറിന് എന്താണ് ഉള്ളതെന്ന് മനസിലാക്കുകയും അതിനെ വിളിക്കുകയും ചെയ്യുന്നു.
  • സെർവർ അതിൻ്റെ വിവരങ്ങൾ പ്രസിദ്ധീകരിക്കുന്നു (സ്ഥാനം, അത് ഏത് രീതികൾ പിന്തുണയ്ക്കുന്നു) അങ്ങനെ ക്ലയൻ്റ് ഈ സെർവർ കണ്ടെത്തുന്നു. UDDI ഡയറക്‌ടറിയിലാണ് പ്രസിദ്ധീകരിക്കുന്നത്.

SOAP സന്ദേശ ഘടന:

  • SOAP എൻവലപ്പ് - ഇതിൽ മുഴുവൻ സന്ദേശവും ഉൾപ്പെടുന്നു. ഒരു തലക്കെട്ടും ശരീരവും ഉൾക്കൊള്ളുന്നു.
  • SOAP തലക്കെട്ട് (തലക്കെട്ട്) - അധിക വിവരങ്ങൾ (അംഗീകാരം, ഉദാഹരണത്തിന്).
  • SOAP ബോഡി (ശരീരം) - സന്ദേശം തന്നെ.
  • സെർവറിൽ നിന്ന് ക്ലയൻ്റിലേക്ക് ഒരു പിശക് കൈമാറുന്നതിനുള്ള ഒരു രീതിയാണ് SOAP തകരാർ (പിശക്).

WSDL

WSDL(വെബ് സേവനങ്ങളുടെ വിവരണ ഭാഷ) - വെബ് സേവനങ്ങൾ വിവരിക്കുന്നതിനുള്ള ഭാഷ. SOAP ൽ ഉപയോഗിക്കുന്നു. ഇത് എല്ലാം വിവരിക്കുന്ന ഒരു തരം ഡോക്യുമെൻ്റാണ്: ഏതൊക്കെ നെയിംസ്‌പേസുകൾ ഉപയോഗിച്ചു, ഏത് ഡാറ്റാ സ്കീമുകൾ ഉപയോഗിച്ചു, സെർവർ ക്ലയൻ്റിൽ നിന്ന് ഏത് തരത്തിലുള്ള സന്ദേശങ്ങളാണ് പ്രതീക്ഷിക്കുന്നത്, ഏതൊക്കെ എൻവലപ്പുകൾ ഏത് രീതിയിലാണ്, ഏത് രീതികൾ നിലവിലുണ്ട്, ഏത് വിലാസത്തിലേക്ക് അയയ്ക്കണം, മുതലായവ . യഥാർത്ഥത്തിൽ, WSDL ഒരു വെബ് സേവനമാണ്. ക്ലയൻ്റ് ഈ പ്രമാണത്തിൻ്റെ ഉള്ളടക്കം പഠിച്ചാൽ മതിയാകും; സെർവറിനെക്കുറിച്ച് അദ്ദേഹത്തിന് ഇതിനകം തന്നെ അറിയാം.

ഏതൊരു സെർവറും WSDL പ്രസിദ്ധീകരിക്കണം.

WSDL ബ്ലോക്കുകൾ ഉൾക്കൊള്ളുന്നു:

  • സേവനത്തിൻ്റെ നിർവ്വചനം, അതായത്. പ്രവേശന പോയിൻ്റ്, പോർട്ട് സൂചിപ്പിച്ചിരിക്കുന്നു.
  • രീതികളുടെ ഫോർമാറ്റ്. എൻട്രി പോയിൻ്റ് പ്രവർത്തനങ്ങളുമായി ബന്ധപ്പെട്ടിരിക്കുന്നു, അതായത്. ഏത് രീതികളാണ് ഇത് പിന്തുണയ്ക്കുന്നത്? കോളിൻ്റെ തരവും ട്രാൻസ്മിഷൻ രീതിയും സൂചിപ്പിച്ചിരിക്കുന്നു. ഓരോ രീതിയിലും ഉള്ളിൽ ഡാറ്റ കൈമാറ്റം ചെയ്യപ്പെടുന്ന ഫോമിൻ്റെ ഒരു വിശദീകരണമുണ്ട് - SOAP രൂപത്തിൽ.
  • ഒരു സന്ദേശവുമായി ബന്ധിപ്പിക്കുന്ന രീതികൾ.
  • സന്ദേശങ്ങളുടെ വിവരണം തന്നെ.

മുൻ അധ്യായത്തിൽ ചർച്ച ചെയ്തതുപോലെ, XML-ൽ സന്ദേശങ്ങൾ അയച്ചുകൊണ്ട് വെബ് സേവനങ്ങൾ ക്ലയൻ്റുകളുമായും പരസ്പരം ആശയവിനിമയം നടത്തുന്നു. ഈ XML നടപ്പിലാക്കലിൻ്റെ ടാഗുകൾ, XML ഡോക്യുമെൻ്റ് ഫോർമാറ്റ് ചെയ്യുന്നതിനുള്ള നിയമങ്ങൾ, ഡോക്യുമെൻ്റുകൾ കൈമാറ്റം ചെയ്യുന്ന ക്രമം എന്നിവ SOAP പ്രോട്ടോക്കോൾ നിർവചിച്ചിരിക്കുന്നു. മൈക്രോസോഫ്റ്റ് കോർപ്പറേഷനിലും യൂസർലാൻഡിലും ജോലി ചെയ്തിരുന്ന ഡേവ് വീനറുടെ നേതൃത്വത്തിലുള്ള ഡവലപ്പർമാരുടെ ഒരു സംഘം 1998-ൽ SOAP പ്രോട്ടോക്കോൾ സൃഷ്ടിച്ചു. പ്രോട്ടോക്കോളിൻ്റെ പേര് - "ലളിതമായ ഒബ്ജക്റ്റ് ആക്സസ് പ്രോട്ടോക്കോൾ" - അതിൻ്റെ യഥാർത്ഥ ഉദ്ദേശ്യത്തെ പ്രതിഫലിപ്പിക്കുന്നു - വിദൂര വസ്തുക്കളുടെ രീതികൾ ആക്സസ് ചെയ്യാൻ. പ്രോട്ടോക്കോളിൻ്റെ ഉദ്ദേശ്യം മാറിയിരിക്കുന്നു; ഇത് ഇപ്പോൾ വെബ് സേവനങ്ങളും അയഞ്ഞ കപ്പിൾഡ് ഡിസ്ട്രിബ്യൂഡ് ആപ്ലിക്കേഷനുകളുടെ ഘടകങ്ങളും തമ്മിലുള്ള ഏതൊരു ഇടപെടലിനുള്ള ഒരു പ്രോട്ടോക്കോളാണ്. ഇത് ഇപ്പോൾ വളരെ ലളിതമല്ല, മാത്രമല്ല ഇത് വസ്തുക്കളെ കുറിച്ച് ഒന്നും പറയുന്നില്ല. മുമ്പത്തെ ചുരുക്കെഴുത്ത് ഉപേക്ഷിച്ച് ഇതിനെ "സർവീസ് ഓറിയൻ്റഡ് ആർക്കിടെക്ചർ പ്രോട്ടോക്കോൾ" എന്ന് വിളിക്കാൻ പല ഡെവലപ്പർമാരും നിർദ്ദേശിക്കുന്നു. ഈ ശ്രമങ്ങൾ നിർത്താൻ, SOAP 1.2 സ്പെസിഫിക്കേഷൻ പറയുന്നത് "SOAP" എന്ന വാക്ക് ഇനി ഒരു തരത്തിലും ഉച്ചരിക്കില്ല എന്നാണ്.

1999 അവസാനത്തോടെ, പ്രോട്ടോക്കോളിൻ്റെ വികസനം W3C കൺസോർഷ്യത്തിലേക്ക് മാറ്റി (http:// www.w3.org/).

2000 മെയ് മാസത്തിൽ, കൺസോർഷ്യം അതിൻ്റെ സോപ്പ് 1.1 പതിപ്പ് പുറത്തിറക്കി. SOAP പ്രോട്ടോക്കോൾ ഉപയോഗിച്ച് എഴുതിയ ഒരു സന്ദേശം, നെയിംസ്പേസുകൾ സജീവമായി ഉപയോഗിക്കുന്ന ഒരു XML പ്രമാണമായി ഫോർമാറ്റ് ചെയ്തിരിക്കുന്നു. SOAP 1.1 XML മൂലക നാമങ്ങൾ നെയിംസ്‌പേസ് ഐഡൻ്റിഫയറിനെ പരാമർശിക്കുന്നു http://schemas.xmlsoap.org/soap/envelope/.

SOAP 1.2-ൻ്റെ രണ്ടാമത്തെ ഡ്രാഫ്റ്റ് 2001-ൽ പുറത്തിറങ്ങി, അക്കാലത്ത് അതിൻ്റെ നെയിംസ്പേസ് http://www.w3.org/2001/06/soap-envelope എന്നായിരുന്നു.

SOAP പതിപ്പ് നിർണ്ണയിക്കുന്നത് നെയിംസ്പേസ് ഐഡൻ്റിഫയറാണ്, 1.1 അല്ലെങ്കിൽ 1.2 നമ്പറല്ല. സെർവർ SOAP സന്ദേശം പരിഗണിക്കില്ല, അത് ശ്രദ്ധയിൽപ്പെട്ടാൽ ഒരു പിശക് സന്ദേശം നൽകും

നെയിംസ്പേസ് പൊരുത്തക്കേട്.

ഞാൻ ഇത് എഴുതുമ്പോൾ, SOAP 1.1 പ്രവർത്തിക്കുന്നു. പതിപ്പ് 1.2 ന് പ്രിപ്പറേറ്ററി ഘട്ടം വിടാൻ കഴിയില്ല, പക്ഷേ ഇതിനകം തന്നെ ഉപയോഗിച്ചു, ഉദാഹരണത്തിന്, SOAP ::Lite, Apache SOAP 2.3, Apache Axis എന്നിവയിൽ. അതിനാൽ, ഈ അധ്യായത്തിൽ ഞാൻ പതിപ്പ് 1.2-ൻ്റെ രൂപരേഖ തയ്യാറാക്കും, പതിപ്പ് 1.1-ൽ നിന്നുള്ള വ്യത്യാസങ്ങൾ ശ്രദ്ധിക്കുക.

പ്രവർത്തിക്കുന്ന SOAP സ്പെസിഫിക്കേഷൻ എപ്പോഴും http://www.w3.org/TR/SOAP/ എന്നതിൽ സംഭരിച്ചിരിക്കുന്നു. പ്രവർത്തന പതിപ്പ് മാറ്റിസ്ഥാപിക്കുമ്പോൾ ഈ വിലാസത്തിൽ സ്ഥിതിചെയ്യുന്ന പ്രമാണങ്ങൾ പുതിയവ ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നു.

SOAP ഡ്രാഫ്റ്റ് തുടർച്ചയായി അപ്ഡേറ്റ് ചെയ്യുകയും നെയിംസ്പേസ് ഐഡൻ്റിഫയർ മാറുകയും ചെയ്യുന്നു. എഴുതുന്ന സമയത്ത് ഏറ്റവും പുതിയ ഡ്രാഫ്റ്റ് പതിപ്പ് സ്ഥിതി ചെയ്യുന്നത് http://www.w3.org/TR/soapl2-partl/, കൂടാതെ അത് ഉപയോഗിച്ച നെയിംസ്പേസ് http://www.w3.org/2002/06/soap ആയിരുന്നു. - കവര്. SOAP 12 സ്പെസിഫിക്കേഷനിൽ രണ്ട് ഭാഗങ്ങളുണ്ട്: ഭാഗം 1 ഉം ഭാഗം 2 ഉം. സ്പെസിഫിക്കേഷൻ്റെ രണ്ടാം ഭാഗം - ആപ്ലിക്കേഷൻ - സങ്കീർണ്ണമായ ഡാറ്റ തരങ്ങൾ രേഖപ്പെടുത്തുന്നതിനുള്ള നിയമങ്ങൾ അടങ്ങിയിരിക്കുന്നു. സ്പെസിഫിക്കേഷനിൽ partO യുടെ മറ്റൊരു ഭാഗമുണ്ട് - SOAP 1.2-ൻ്റെ നിയമങ്ങൾ അനുസരിച്ച് സമാഹരിച്ച സന്ദേശങ്ങളുടെ ഉദാഹരണങ്ങൾ.

SOAP സന്ദേശ ഘടന

ഒരു ഡോക്യുമെൻ്റ് തരം ഡിക്ലറേഷനോ പ്രോസസ്സിംഗ് നിർദ്ദേശങ്ങളോ അടങ്ങിയിട്ടില്ലാത്ത ഒരു XML പ്രമാണമായി SOAP സന്ദേശത്തെ സ്പെസിഫിക്കേഷൻ നിർവചിക്കുന്നു. ഈ XML ഡോക്യുമെൻ്റിൻ്റെ റൂട്ട് എലമെൻ്റിനെ വിളിക്കുന്നു . ഒരു മൂലകത്തിന് നെയിംസ്‌പെയ്‌സിനെ നിർവചിക്കുന്ന ആട്രിബ്യൂട്ടുകൾ ഉണ്ടായിരിക്കാം,

കൂടാതെ മറ്റ് ആട്രിബ്യൂട്ടുകളും പ്രിഫിക്‌സുകൾക്കൊപ്പം നൽകിയിരിക്കുന്നു. റൂട്ട് എലമെൻ്റിൽ സന്ദേശ തലക്കെട്ട് അടങ്ങിയ ഒരു ഓപ്‌ഷണൽ ഘടകവും ആവശ്യമായ ഒരു ഘടകവും അടങ്ങിയിരിക്കുന്നു , അതിൽ സന്ദേശത്തിൻ്റെ ഉള്ളടക്കം രേഖപ്പെടുത്തുന്നു. ശരീരത്തിന് ശേഷം പതിപ്പ് 1.1 അനുവദനീയമാണ് അനിയന്ത്രിതമായ ഘടകങ്ങൾ എഴുതാൻ, അവയുടെ പേരുകൾ പ്രിഫിക്‌സ് ചെയ്യേണ്ടതുണ്ട്. ഘടകത്തിന് ശേഷം ഒന്നും എഴുതുന്നത് പതിപ്പ് 1.2 നിരോധിക്കുന്നു . ചുരുക്കത്തിൽ, ഒരു SOAP സന്ദേശത്തിൻ്റെ പൊതുവായ ഘടന ഇതാണ്:

xmlns:env="http://www.w3.org/2002/06/soap-envelope">

< ! - Блоки заголовка ->

ഘടകം

, അത് സന്ദേശത്തിലാണെങ്കിൽ, മൂലകത്തിൻ്റെ ശരീരത്തിൽ ആദ്യം എഴുതപ്പെടും . xmlns ആട്രിബ്യൂട്ടുകൾക്ക് പുറമേ, അതിൽ ഒരു അഭിനേതാവ് ആട്രിബ്യൂട്ട് അടങ്ങിയിരിക്കാം, അത് സന്ദേശം ഉദ്ദേശിച്ചിട്ടുള്ള നിർദ്ദിഷ്ട SOAP സെർവറിൻ്റെ URI വിലാസം സൂചിപ്പിക്കുന്നു.

ഒരു SOAP സന്ദേശത്തിന് നിരവധി SOAP സെർവറുകളിലൂടെയോ ഒരേ സെർവറിലെ നിരവധി ആപ്ലിക്കേഷനുകളിലൂടെയോ കടന്നുപോകാൻ കഴിയും എന്നതാണ് വസ്തുത. ഈ ആപ്ലിക്കേഷനുകൾ സന്ദേശ ഹെഡർ ബ്ലോക്കുകൾ മുൻകൂട്ടി പ്രോസസ്സ് ചെയ്യുകയും പരസ്പരം കൈമാറുകയും ചെയ്യുന്നു. ഈ സെർവറുകളേയും കൂടാതെ/അല്ലെങ്കിൽ ആപ്ലിക്കേഷനുകളേയും SOAP നോഡുകൾ എന്ന് വിളിക്കുന്നു. സെർവറുകളുടെ ഒരു ശൃംഖലയിലൂടെ ഒരു സന്ദേശം കൈമാറുന്നതിനുള്ള നിയമങ്ങൾ SOAP സ്പെസിഫിക്കേഷൻ നിർവചിക്കുന്നില്ല. ഈ ആവശ്യത്തിനായി, മറ്റ് പ്രോട്ടോക്കോളുകൾ വികസിപ്പിക്കുന്നു, ഉദാഹരണത്തിന്, Microsoft WS-Routing.

ആക്ടർ ആട്രിബ്യൂട്ട് ടാർഗെറ്റ് SOAP നോഡ് വ്യക്തമാക്കുന്നു - ചെയിനിൻ്റെ അറ്റത്ത് സ്ഥിതി ചെയ്യുന്നതും മുഴുവൻ ഹെഡറും പ്രോസസ്സ് ചെയ്യുന്നതുമായ ഒന്ന്. അർത്ഥം

തലക്കെട്ട് ആദ്യം ലഭിക്കുന്ന സെർവർ പ്രോസസ്സ് ചെയ്യുമെന്ന് നടൻ ആട്രിബ്യൂട്ട് സൂചിപ്പിക്കുന്നു. ഈ ബ്ലോക്ക് കൈകാര്യം ചെയ്യുന്ന നോഡിനെ സൂചിപ്പിക്കുന്ന പ്രത്യേക ഹെഡർ ബ്ലോക്കുകളിൽ ആക്ടർ ആട്രിബ്യൂട്ട് ദൃശ്യമാകും. പ്രോസസ്സ് ചെയ്ത ശേഷം, SOAP സന്ദേശത്തിൽ നിന്ന് ബ്ലോക്ക് നീക്കം ചെയ്യപ്പെടും.

പതിപ്പ് 1.2-ൽ, ആക്ടർ ആട്രിബ്യൂട്ട് റോൾ ആട്രിബ്യൂട്ട് ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നു, കാരണം SOAP-ൻ്റെ ഈ പതിപ്പിൽ, ഓരോ നോഡും ഒന്നോ അതിലധികമോ റോളുകൾ വഹിക്കുന്നു. സ്പെസിഫിക്കേഷൻ നിലവിൽ മൂന്ന് SOAP നോഡ് റോളുകൾ നിർവചിക്കുന്നു.

http://^^.w3.org/2002/06/soap-envelope/role/ultimateReceiver-ൻ്റെ പങ്ക് വഹിക്കുന്നത് ഹെഡർ പ്രോസസ്സ് ചെയ്യുന്ന അന്തിമ, ടാർഗെറ്റ് നോഡാണ്.

http://www.w3.org/2002/06/soap-envelope/role/next എന്ന റോൾ ഇൻ്റർമീഡിയറ്റ് അല്ലെങ്കിൽ ടാർഗെറ്റ് നോഡാണ് വഹിക്കുന്നത്. അത്തരമൊരു നോഡിന് മറ്റ്, അധിക റോളുകൾ വഹിക്കാൻ കഴിയും.

http://www.w3.org/2002/06/soap-envelope/role/none എന്ന റോൾ ഒരു SOAP നോഡും പ്ലേ ചെയ്യാൻ പാടില്ല.

ഡിസ്ട്രിബ്യൂട്ടഡ് ആപ്ലിക്കേഷനുകൾക്ക്, അവരുടെ ആവശ്യങ്ങളെ അടിസ്ഥാനമാക്കി, ഈ റോളുകളിലേക്ക് മറ്റ് റോളുകൾ ചേർക്കാൻ കഴിയും, ഉദാഹരണത്തിന്, ഡിജിറ്റൽ സിഗ്നേച്ചർ പരിശോധിക്കുന്ന ഒരു ഇൻ്റർമീഡിയറ്റ് സെർവർ അവതരിപ്പിക്കുകയും ചില URI സ്ട്രിംഗ് ഉപയോഗിച്ച് ഈ റോൾ നിർവ്വചിക്കുകയും ചെയ്യുന്നു.

റോൾ ആട്രിബ്യൂട്ടിൻ്റെ മൂല്യം ഈ ഹെഡർ ബ്ലോക്ക് ഉദ്ദേശിച്ചിട്ടുള്ള നോഡിൻ്റെ റോൾ സൂചിപ്പിക്കുന്ന ഏത് URI സ്ട്രിംഗും ആകാം. ഈ ആട്രിബ്യൂട്ടിൻ്റെ സ്ഥിര മൂല്യം ശൂന്യമായ മൂല്യമാണ്, അതായത്, ഒരു ജോടി ഉദ്ധരണികൾ അല്ലെങ്കിൽ URI സ്ട്രിംഗ് http://\vw\v.w3.org/2002/06/soap-envelope/rale/ultimateReceiver.

റോൾ ആട്രിബ്യൂട്ടിൻ്റെ മൂല്യം സൂചിപ്പിക്കുന്നത്, അതേ സ്ട്രിംഗ് വ്യക്തമാക്കിയ റോൾ പ്ലേ ചെയ്യുന്ന ഒരു നോഡ് ഉപയോഗിച്ച് ബ്ലോക്ക് പ്രോസസ്സ് ചെയ്യണമെന്ന്.

മറ്റൊരു ഘടകം ആട്രിബ്യൂട്ട്

urnstUnderstand എന്ന് വിളിക്കപ്പെടുന്ന, o അല്ലെങ്കിൽ 1 മൂല്യങ്ങൾ എടുക്കുന്നു. അതിൻ്റെ സ്ഥിര മൂല്യം o ആണ്. മനസ്സിലാക്കേണ്ട ആട്രിബ്യൂട്ട് 1 ന് തുല്യമാണെങ്കിൽ, SOAP നോഡ്, ഘടകം പ്രോസസ്സ് ചെയ്യുമ്പോൾ, ഡോക്യുമെൻ്റ് സ്കീമയിൽ നിർവചിച്ചിരിക്കുന്ന അതിൻ്റെ വാക്യഘടന കണക്കിലെടുക്കണം അല്ലെങ്കിൽ സന്ദേശം പ്രോസസ്സ് ചെയ്യരുത്. ഇത് സന്ദേശ പ്രോസസ്സിംഗിൻ്റെ കൃത്യത വർദ്ധിപ്പിക്കുന്നു.

SOAP പതിപ്പ് 1.2-ൽ, o എന്ന നമ്പറിന് പകരം നിങ്ങൾ തെറ്റായ വാക്ക് എഴുതേണ്ടതുണ്ട്, കൂടാതെ നമ്പർ 1-ന് പകരം true എന്ന വാക്ക് എഴുതുക.

ഹെഡർ ബോഡിയിൽ

മുമ്പ് ഹെഡർ എൻട്രികൾ എന്ന് വിളിച്ചിരുന്ന അനിയന്ത്രിതമായ ഘടകങ്ങൾ നിങ്ങൾക്ക് നെസ്റ്റ് ചെയ്യാം. പതിപ്പ് 1.2-ൽ ഇവയെ ഹെഡർ ബ്ലോക്കുകൾ എന്ന് വിളിക്കുന്നു. അവരുടെ പേരുകൾ പ്രിഫിക്സുകൾ കൊണ്ട് അടയാളപ്പെടുത്തിയിരിക്കണം. ഹെഡർ ബ്ലോക്കുകളിൽ റോൾ അല്ലെങ്കിൽ അഭിനേതാവ് അടങ്ങിയിരിക്കാം, ആട്രിബ്യൂട്ടുകൾ മനസ്സിലാക്കണം. അവരുടെ പ്രവർത്തനം ഈ ബ്ലോക്കിന് മാത്രമേ ബാധകമാകൂ. റോൾ ആട്രിബ്യൂട്ട് വ്യക്തമാക്കിയ റോളുമായി പൊരുത്തപ്പെടുന്ന റോൾ, ഇൻ്റർമീഡിയറ്റ് SOAP നോഡുകൾ വഴി വ്യക്തിഗത ഹെഡർ ബ്ലോക്കുകൾ പ്രോസസ്സ് ചെയ്യാൻ ഇത് അനുവദിക്കുന്നു. ലിസ്റ്റിംഗ് 3.1 അത്തരം ഒരു ബ്ലോക്കിൻ്റെ ഉദാഹരണം കാണിക്കുന്നു.

ലിസ്റ്റിംഗ് 3.1. ഒരു ബ്ലോക്കുള്ള തലക്കെട്ട്

xmlns:t="http://some.com/transaction" env:role=

"http://www.w3.org/2002/06/soap-envelope/role/ultimateReceiver" env:mustUnderstand="1">

ഹെഡർ ബ്ലോക്കുകൾക്കുള്ളിൽ നെസ്റ്റ് ചെയ്തിരിക്കുന്ന മൂലകങ്ങളെ ഇനി ബ്ലോക്കുകൾ എന്ന് വിളിക്കില്ല. അവയ്ക്ക് റോൾ, നടൻ, ആട്രിബ്യൂട്ടുകൾ എന്നിവ ഉൾക്കൊള്ളാൻ കഴിയില്ല.

ഘടകം മൂലകത്തിന് ശേഷം ഉടൻ എഴുതണം

, അത് സന്ദേശത്തിലാണെങ്കിൽ, അല്ലെങ്കിൽ ഹെഡ്ഡർ നഷ്‌ടപ്പെട്ടാൽ ആദ്യം SOAP സന്ദേശത്തിൽ. മൂലകത്തിലേക്ക് നിങ്ങൾക്ക് അനിയന്ത്രിതമായ ഘടകങ്ങൾ നെസ്റ്റ് ചെയ്യാൻ കഴിയും; സ്പെസിഫിക്കേഷൻ അവയുടെ ഘടനയെ ഒരു തരത്തിലും നിർവചിക്കുന്നില്ല. എന്നിരുന്നാലും, ഒരു ഘടകത്തിൽ ഒരു പിശക് സന്ദേശം അടങ്ങിയിരിക്കുന്നു.

പിശക് സന്ദേശം

ഒരു SOAP സെർവർ, അതിന് ലഭിച്ച ഒരു SOAP സന്ദേശം പ്രോസസ്സ് ചെയ്യുമ്പോൾ, ഒരു പിശക് ശ്രദ്ധയിൽപ്പെട്ടാൽ, അത് പ്രോസസ്സിംഗ് നിർത്തി ക്ലയൻ്റിലേക്ക് ഒരു SOAP സന്ദേശം അയയ്‌ക്കും, അതിൻ്റെ ബോഡിയിൽ അത് ഒരു ഘടകം എഴുതും. ഒരു പിശക് സന്ദേശത്തോടൊപ്പം.

ഒരു SOAP 1.1 മൂലകത്തിൻ്റെ ശരീരത്തിൽ എഴുതിയ സന്ദേശത്തിൽ,

താഴെ പറയുന്ന ഉപഘടകങ്ങളാൽ വിവരിച്ചിരിക്കുന്ന നാല് ഭാഗങ്ങളുണ്ട്.

പിശക് കോഡ് - പിശകിൻ്റെ തരം സൂചിപ്പിക്കുന്ന ഒരു സന്ദേശം. പിശകുകൾ കൈകാര്യം ചെയ്യുന്ന ഒരു പ്രോഗ്രാമിനായി ഇത് ഉദ്ദേശിച്ചുള്ളതാണ്.

പിശകിൻ്റെ വിവരണം - ഒരു വ്യക്തിയെ ഉദ്ദേശിച്ചുള്ള പിശകിൻ്റെ തരം വാക്കാലുള്ള വിവരണം.

എവിടെയാണ് പിശക് കണ്ടെത്തിയത് - പിശക് ശ്രദ്ധയിൽപ്പെട്ട സെർവറിൻ്റെ URI. പിശകിൻ്റെ സ്വഭാവം വ്യക്തമാക്കുന്നതിന് SOAP നോഡുകളുടെ ഒരു ശൃംഖലയിലൂടെ ഒരു സന്ദേശം പോകുമ്പോൾ ഉപയോഗപ്രദമാണ്. ഈ ഘടകം രേഖപ്പെടുത്താൻ ഇൻ്റർമീഡിയറ്റ് SOAP നോഡുകൾ ആവശ്യമാണ്; ടാർഗെറ്റ് SOAP സെർവർ അങ്ങനെ ചെയ്യേണ്ടതില്ല.

പിശക് വിശദാംശങ്ങൾ - ശരീരത്തിൽ നേരിട്ട പിശകുകൾ വിവരിക്കുക സന്ദേശം, പക്ഷേ അതിൻ്റെ തലക്കെട്ടിൽ ഇല്ല. ബോഡി പ്രോസസ്സിംഗ് സമയത്ത് പിശകുകളൊന്നും കണ്ടെത്തിയില്ലെങ്കിൽ, ഈ ഘടകം കാണുന്നില്ല.

ഉദാഹരണത്തിന്:

xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">

env:മനസ്സിലാക്കണം SOAP പിശക് മനസ്സിലാക്കണം

SOAP പതിപ്പ് 1.2 വിവരിച്ചിരിക്കുന്നതുപോലെ മൂലകത്തിൻ്റെ ഉള്ളടക്കം മാറ്റി

നെയിംസ്പേസ് http://www.w3.org/2002/06/soap-envelope, അതിൽ ആവശ്യമായ രണ്ട് ഘടകങ്ങളും മൂന്ന് ഓപ്ഷണൽ ഘടകങ്ങളും ഉൾപ്പെടുന്നു.

ആവശ്യമായ ഘടകങ്ങൾ.

പിശക് കോഡ് . അതിൽ ആവശ്യമായ ഒരു ഉപഘടകം അടങ്ങിയിരിക്കുന്നു<:value>ഒരു പിശക് കോഡും ഒരു ഓപ്ഷണൽ ഉപ-ഘടകവും , അടങ്ങിയിരിക്കുന്നു, വീണ്ടും, ഘടകം പിശക് കോഡും ഘടകവും വ്യക്തമാക്കുന്നതിനൊപ്പം , തുടർന്ന് എല്ലാം ആവർത്തിച്ച് ആവർത്തിക്കുന്നു.

പിശകിനുള്ള കാരണം . ഒരു ഓപ്ഷണൽ xml ആട്രിബ്യൂട്ട് അടങ്ങിയിരിക്കുന്നു: lang, സന്ദേശത്തിൻ്റെ ഭാഷയെ സൂചിപ്പിക്കുന്നു (അധ്യായം ഡി കാണുക), പിശക് വിവരിക്കുന്ന നെസ്റ്റഡ് ഘടകങ്ങളുടെ അനിയന്ത്രിതമായ എണ്ണം.

ഓപ്ഷണൽ ഘടകങ്ങൾ.

? - പിശക് ശ്രദ്ധയിൽപ്പെട്ട ഇൻ്റർമീഡിയറ്റ് SOAP നോഡിൻ്റെ URI.

? - പിശക് ശ്രദ്ധയിൽപ്പെട്ട SOAP നോഡിൻ്റെ പങ്ക്.

? - ശരീരം പ്രോസസ്സ് ചെയ്യുമ്പോൾ ശ്രദ്ധയിൽപ്പെട്ട പിശകിൻ്റെ വിവരണം സന്ദേശം, പക്ഷേ തലക്കെട്ടല്ല.

ലിസ്റ്റിംഗ് 3.2 ഒരു നടപടിക്രമം നടപ്പിലാക്കാൻ ശ്രമിക്കുമ്പോൾ സംഭവിച്ച ഒരു പിശക് സന്ദേശം കാണിക്കുന്നു. നടപടിക്രമത്തിൻ്റെ ആർഗ്യുമെൻ്റുകളുടെ പേരുകൾ SOAP സന്ദേശത്തിൽ തെറ്റായി എഴുതിയിരിക്കുന്നതും നടപടിക്രമത്തിന് അവ മനസ്സിലാക്കാൻ കഴിയാത്തതുമാണ് പിശക്.

ലിസ്റ്റിംഗ് 3.2. പിശക് സന്ദേശം

xmlns:env="http://www.w3.org/2002/06/soap-envelope" xmlns:rpc='http://www.w3.org/2002/06/soap-rpc'>

env:അയക്കുന്നയാൾ

rpc:BadArgumentsc/env:Value>

Ptocessing ETror

xmlns:e="http://www.example.org/faults"> №ഞാൻ പൊരുത്തപ്പെടുന്നില്ല 999

പിശകുകളുടെ തരങ്ങൾ

പിശക് കോഡുകളുടെ പട്ടിക നിരന്തരം മാറുകയും വികസിക്കുകയും ചെയ്യുന്നു. പതിപ്പ് 1.1 നാല് തരത്തിലുള്ള പിശകുകൾ നിർവചിക്കുന്നു.

പതിപ്പ് പൊരുത്തക്കേട് - നെയിംസ്പേസ് തിരിച്ചറിഞ്ഞിട്ടില്ല. ഇത് കാലഹരണപ്പെട്ടതാകാം അല്ലെങ്കിൽ അതിൻ്റെ പേര് തെറ്റായി എഴുതിയിരിക്കാം.

MustUnderstand - 1 മൂല്യമുള്ള, MustUnderstand ആട്രിബ്യൂട്ട് ഉപയോഗിച്ച് അടയാളപ്പെടുത്തിയിരിക്കുന്ന ഒരു ഹെഡർ ബ്ലോക്ക്, ഡോക്യുമെൻ്റ് സ്കീമയിൽ നിർവചിച്ചിരിക്കുന്നതുപോലെ അതിൻ്റെ വാക്യഘടനയുമായി പൊരുത്തപ്പെടുന്നില്ല.

ക്ലയൻ്റ് - സന്ദേശം അടങ്ങുന്ന XML ഡോക്യുമെൻ്റ് കേടായതിനാൽ സെർവറിന് ഇത് പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല. ക്ലയൻ്റ് സന്ദേശം മാറ്റണം.

സെർവർ - സെർവറിന് അതിൻ്റെ ആന്തരിക കാരണങ്ങളാൽ ശരിയായി രേഖപ്പെടുത്തിയ സന്ദേശം പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല.

പതിപ്പ് 1.2 അഞ്ച് തരത്തിലുള്ള പിശകുകൾ നിർവചിക്കുന്നു.

പതിപ്പ് പൊരുത്തക്കേട് - നെയിംസ്പേസ് തിരിച്ചറിഞ്ഞിട്ടില്ല. ഇത് കാലഹരണപ്പെട്ടതാകാം, അല്ലെങ്കിൽ അതിൻ്റെ പേര് തെറ്റായി എഴുതിയിരിക്കാം, അല്ലെങ്കിൽ ആ നെയിംസ്‌പെയ്‌സിൽ നിർവചിച്ചിട്ടില്ലാത്ത ഒരു XML ഘടക നാമം സന്ദേശത്തിൽ ഉണ്ടായിരിക്കാം. പ്രതികരണ തലക്കെട്ടിലേക്ക് സെർവർ ഘടകം എഴുതുന്നു , നെസ്റ്റഡ് മൂലകങ്ങളെ എണ്ണുന്നു സെർവർ മനസ്സിലാക്കിയ ശരിയായ നെയിംസ്പേസ് നാമങ്ങൾ. സെർവർ പ്രതികരണം ലിസ്റ്റിംഗ് 3.3 ൽ കാണിച്ചിരിക്കുന്നു.

MustUnderstand - പ്രമാണം സ്കീമയിൽ നിർവചിച്ചിരിക്കുന്നതുപോലെ, true എന്ന് സജ്ജീകരിച്ചിരിക്കുന്ന mustunderstand ആട്രിബ്യൂട്ട് ഉപയോഗിച്ച് അടയാളപ്പെടുത്തിയ ഒരു ഹെഡർ ബ്ലോക്ക് അതിൻ്റെ വാക്യഘടനയുമായി പൊരുത്തപ്പെടുന്നില്ല. പ്രതികരണ തലക്കെട്ടിലേക്ക് സെർവർ ഇനിപ്പറയുന്ന ഘടകങ്ങൾ എഴുതുന്നു: , ആരുടെ qname ആട്രിബ്യൂട്ടിൽ തെറ്റായ ബ്ലോക്കിൻ്റെ പേര് അടങ്ങിയിരിക്കുന്നു. ലിസ്റ്റിംഗ് 3.1 ലെ ഹെഡർ തെറ്റായി എഴുതിയാൽ സെർവർ നൽകുന്ന പ്രതികരണത്തിൻ്റെ ഒരു ഉദാഹരണം ലിസ്റ്റിംഗ് 3.4-ൽ അടങ്ങിയിരിക്കുന്നു.

DataEncodingUnknown - സന്ദേശത്തിൽ മനസ്സിലാക്കാൻ കഴിയാത്ത ഡാറ്റ അടങ്ങിയിരിക്കുന്നു, ഒരുപക്ഷേ അത് ഒരു അജ്ഞാത എൻകോഡിംഗിൽ എഴുതിയതാകാം.

അയയ്ക്കുന്നയാൾ - സന്ദേശം അടങ്ങുന്ന XML പ്രമാണം തെറ്റായി രൂപപ്പെട്ടതാണ്, ഇക്കാരണത്താൽ സെർവറിന് ഇത് പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല. ക്ലയൻ്റ് സന്ദേശം മാറ്റണം.

റിസീവർ - സെർവറിന് അതിൻ്റെ ആന്തരിക കാരണങ്ങളാൽ ശരിയായി റെക്കോർഡ് ചെയ്‌ത സന്ദേശം പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല, ഉദാഹരണത്തിന്, ആവശ്യമായ XML പാഴ്‌സർ കാണുന്നില്ല.

ഈ പിശക് തരങ്ങളിലേക്ക് സെർവറിന് അതിൻ്റേതായ ചില തരങ്ങൾ ചേർക്കാൻ കഴിയും. സാധാരണയായി

അവ സ്റ്റാൻഡേർഡ് തരങ്ങളും അവയെക്കുറിച്ചുള്ള സന്ദേശങ്ങളും ഘടകങ്ങളിൽ ദൃശ്യമാകുന്നു , ലിസ്റ്റിംഗ് 3.2 ൽ മുകളിൽ കാണിച്ചിരിക്കുന്നത് പോലെ.

? ലിസ്റ്റിംഗ് 3.3. VersionMismatch പോലെയുള്ള ഒരു പിശക് സന്ദേശമുള്ള സെർവർ പ്രതികരണം

xmlns:env="http://www.w3.org/2002/06/soap-envelope">

xmlns:upg="http://www.w3.org/2002/06/soap-upgrade">

xmlns:nsl="http://www.w3.org/2002/06/soap-envelope"/>

xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"/>

env:പതിപ്പ് പൊരുത്തക്കേട്

പതിപ്പ് പൊരുത്തക്കേട്

ListongZ.4. MustUnderstand പോലെയുള്ള ഒരു പിശക് സന്ദേശമുള്ള സെർവർ പ്രതികരണം

xmlns:t='http://some.com/transaction' />

env:മനസ്സിലാക്കണം

ഒന്നോ അതിലധികമോ നിർബന്ധിത തലക്കെട്ടുകൾ മനസ്സിലായില്ല

സാഹിത്യം:

ജാവ ഉപയോഗിച്ചുള്ള വെബ് സേവനങ്ങളുടെ വികസനം ഖബീബുലിൻ I. Sh. - സെൻ്റ് പീറ്റേഴ്സ്ബർഗ്: BHV-പീറ്റേഴ്സ്ബർഗ്, 2003. - 400 പേ.: അസുഖം.