Terrasoft վեբ ծառայությունների հետ աշխատել արտաքին հավելվածներից: Վեբ ծառայություններ Մենք ընդունում ենք ֆայլը՝ օգտագործելով 1c վեբ ծառայությունը


Բանալի բառեր՝ վեբ ծառայություն, վեբ ծառայություն, SOAP, WSDL, ws հղում

Հրաժարում պատասխանատվությունից և օգտագործման պայմաններից

Այս հոդվածում պատահաբար նշված բոլոր ապրանքային նշանները պատկանում են իրենց համապատասխան սեփականատերերին:
Այս հոդվածը հրապարակված է Creative Commons Attribution-Share Alike 3.0 Unported լիցենզիայի ներքո: http://creativecommons.org/licenses/by-sa/3.0/

Մեկ այլ հերքում (բազմիցս հետո)

1C:Enterprise 8 հարթակը մշտապես զարգանում է: Հետեւաբար, այս հոդվածում ներկայացված կոդը վերջին տարբերակներըհարթակը սխալ կառաջացնի: Դա տեղի է ունենում, մասնավորապես, պայմանավորված է նրանով, որ փոխվել է վեբ ծառայության պրոքսի օբյեկտի կանչման կարգը. օրինակ, բարդ օբյեկտները պետք է բացահայտորեն փոխարկվեն համապատասխան տեսակի XDTO օբյեկտի` օգտագործելով համապատասխան ծառայության գործարանը: . Այս մասին կարող եք կարդալ մեր ֆորումում կամ «1C:Enterprise Integration Technologies» գրքում http://v8.1c.ru/metod/books/book.jsp?id=288

Ներածություն

Երբ հայտնվում է նոր տարբերակինչ-որ ծրագրային արտադրանք, ապա, բնականաբար, առաջին հերթին ցանկանում եք հասկանալ, թե ինչ նորություն կա դրա մեջ: 1C:Enterprise 8.1-ի դեպքում վեբ ծառայություններն ինձ համար դարձան նոր «առանձնահատկություն»: Վեբ ծառայությունների մասին շատ է գրվել ու ասվել, քանի որ համակարգչային չափանիշներով այս տեխնոլոգիան բավականին երկար ժամանակ գոյություն ունի։ Ուստի ես չեմ կրկնվի, ես բոլորին հղում եմ Yandex-ին՝ տեղեկատվության համար։ Միայն կասեմ, որ 1C:Enterprise 8.1 հարթակի նոր թողարկման թողարկմամբ 1Snikov-ը հնարավորություն ունի ստեղծելու և օգտագործելու վեբ ծառայությունների տեխնոլոգիան՝ լինելով, այսպես ասած, հարազատ միջավայրում։ Այս հոդվածում ես ուզում եմ ցույց տալ, թե ինչպես օգտագործել արտաքին վեբ ծառայությունները ձեր մշակումների մեջ:

Նրանց համար, ովքեր լիովին «դուրս են գալիս»՝ վեբ ծառայությունների մասին «ձեր ձեռքի տակ»

ԼԱՎ, հատուկ քեզ համարԵս կփորձեմ ձեզ մի փոքր պատմել, թե ինչ է իրենից ներկայացնում վեբ ծառայությունը և ինչու ՍաԻնձ թվում էր հարթակի այսպիսի «համեղ» նորամուծություն։ Միգուցե դուք գիտեք COM տեխնոլոգիայի մասին կամ ինչ-որ բան լսել եք OLE-ի մասին: Վաղ թե ուշ, ցանկացած անհատ աշխատող կհանդիպի այս տեխնոլոգիային (հատկապես, եթե ձեզ անհրաժեշտ է արագ փոխանցել «Աշխատակիցներ» որոշ գրացուցակ, և HR բաժինը, ակնկալելով բոլոր 1500 աշխատակիցներին կրկին մեքենա վարելու անհրաժեշտությունը, պատրաստ է առաջին հերթին կախել ձեզ: հարմար եղունգ, որը գալիս է):
Այո, այնպես որ, COM տեխնոլոգիայի հիմքում ընկած է գաղափարը հնարավորություններըմեկ հավելվածի ծրագրային կոդը կանչելը (և տվյալների մուտքը) մեկ այլ հավելվածից: Ավելին, հնարավորություններըդա անել ոչ թե անհատական ​​ընթացակարգերի և գործառույթների մակարդակով, այլ տրամադրության տակ դնելով առարկաներմեկ այլ դիմում: OLE օգտագործելիս մենք մեր հավելվածում ստեղծում ենք օբյեկտ, որը « ներկայացուցիչ«Կամ, եթե նախընտրում եք,» փաթաթան«հավելվածի որոշ օբյեկտի, որի հետ մենք ցանկանում ենք փոխազդել (այսպես կոչված «OLE օբյեկտ» կամ «COM օբյեկտ»): Այս «փաթաթված» օբյեկտի միջոցով մեզ հասանելի են դառնում մեկ այլ հավելվածի օբյեկտի հատկությունները և մեթոդները. , և միայն նրանք, որոնցից մշակողը ԳնալՀավելվածները մեզ թույլ տվեցին օգտագործել՝ դրանք հրապարակելով նկարագրության մեջ ինտերֆեյս. (Դե, ես չէի ուզում մտնել մոլախոտերի մեջ, բայց այլ ճանապարհ չկա ...)
Հիմա եկեք դա պատկերացնենք հենց նույնըհավելվածը գտնվում է մեկ այլ համակարգչի վրա, և նույնիսկ այն չէ տեղական ցանց(DCOM-ը, CORBA-ն և այլ անհեթեթ հապավումները բավականին լավ են լուծում նման դեպքերը), և ինչ-որ տեղ հեռու, հեռու ինտերնետում: Հենց այստեղ են հայտնվում վեբ ծառայությունները (նաև ամբողջական հապավումներով՝ SOAP, WSDL և այլն), որոնք թույլ են տալիս կատարել նմանատիպ «հնարք» այս դեպքում. ստանալ տվյալներ և շահարկել օբյեկտները ինտերնետի մյուս կողմում գտնվող համակարգչով աշխատող հավելվածից:
Տակ « արտաքին«Վեբ ծառայություն ասելով ես նկատի ունեմ վեբ ծառայություն, որը տրամադրվում է ոմանց մատակարարԾառայություն (այսինքն՝ ոչ մեր հավելվածը): Համապատասխանաբար, «ներքին»՝ վեբ ծառայության կողմից, որը մենք կտրամադրենք -իցկամ, ավելի ճիշտ, հիմնվածմեր դիմումը. Արտաքին վեբ ծառայություններից օգտվելիս մենք պետք է հասկանանք, որ թեև «փաթաթող» օբյեկտը ստեղծվել է մեր «տեղական» հավելվածում, սակայն այս օբյեկտի «կատարող կոդը» գտնվում է, հավանաբար, գլոբուսի մյուս կողմում: Միաժամանակ փոխանակումը միջեւ մեզԵվ նրանցտեղի է ունենում այժմ ամենուր տարածված XML-ում, իր հայտնի «կողմ»-ներով (բազմակողմանիություն և կառուցվածք) և «դեմ» (փքվածություն), իսկ հին լավ http-ն օգտագործվում է որպես «հաղորդման գիծ»:
Այո, և մի մոռացեք ինտերնետ տրաֆիկի մասին: Ավելին, արտաքին վեբ ծառայությունների դեպքում դրա մեծ մասը միացված կլինի մուտքայինբաղադրիչ.
Մնացած ամեն ինչ Yandex-ում է: Անցնենք առաջ...

Որտեղի՞ց են ոտքերը, այսինքն. թևերը աճում են

Փորփրելով Yandex-ը, ես գտա մի հրաշալի վեբ ծառայություն Aeroflot ընկերության կողմից, որը թույլ է տալիս իրական ժամանակում տեղեկատվություն ստանալ ինքնաթիռների ժամանման և մեկնելու մասին և որոշեցի 1C:Enterprise-ում մի տեսակ «Օդանավակայանի ցուցադրում» պատրաստել: Ծառայությունն ինքնին ապրում է այստեղ՝ http://webservices.aeroflot.ru/desc_flightinfo.asp

Ասաց.— Գնանք։

Սկզբից ես ստեղծեցի «1C:Enterprise 8.1»-ի դատարկ կոնֆիգուրացիան (գրելու պահին իմ տրամադրության տակ ունեի պլատֆորմի 8.1.5.123 տարբերակը): Այնուհետև ես ավելացրի WS-link տեսակի նոր օբյեկտ իմ կազմաձևում: Երբ ինձ հուշեցին մուտքագրել ներմուծված WSDL-ի URL-ը, ես մուտքագրեցի հղում դեպի WSDL ֆայլ, որը նշված է ծառայության էջում՝ http://webservices.aeroflot.aero/flightstatus.wsdl (WSDL ֆայլը նկարագրություն է վեբ ծառայություն Մանրամասների համար այցելեք Yandex) և ստեղծված օբյեկտը հպարտորեն անվանեց «Աերոֆլոտ»: Կրկնակի սեղմելով այս օբյեկտի վրա՝ ես ստացա վեբ ծառայության կառուցվածքով ծառ։

Այս ծառը ներկայացնում է վեբ ծառայության «դիմանկարը», ինչպես տեսնում է 1Ska-ն: Ամենահետաքրքիրը «Web services» մասնաճյուղում է՝ սա անուններըԵվ նավահանգիստներըվեբ ծառայություններ (իրականում, WSDL ֆայլը կարող է նկարագրել ոչ թե մեկ, այլ մի քանի վեբ ծառայություններ, ապա յուրաքանչյուր վեբ ծառայություն կունենա իր մասնաճյուղը), և նշված են մեթոդներըվեբ ծառայություն. Սրանք հենց այն «լարերն» են, որոնք քաշելով՝ դուք կարող եք ձեզ հասանելիություն տալ վեբ ծառայության տրամադրած տվյալներին: «Տվյալների մոդել» մասնաճյուղը պարունակում է տվյալների տեսակների գրադարանների նկարագրությունը, որոնք օգտագործվում են վեբ ծառայության կողմից:
Համառոտ ամփոփում, թե ինչպես օգտագործել վեբ ծառայությունը, սովորաբար կարելի է գտնել այն նույն տեղում, որտեղ հղումը դեպի WSDL ֆայլը: Aeroflot-ի դեպքում սա http://webservices.aeroflot.aero/flightstatus.asmx էջն է։

«Հիմա թռիչք, հիմա վայրէջք…»

Վեբ ծառայության հետ աշխատելու համար ես ավելացրի «Departures Display» մշակումը կոնֆիգուրացիայի մեջ, և դրա մեջ մեկ ձև, որը ես նշանակեցի որպես հիմնական: Ձևաթղթում տեղադրեցի ընտրության դաշտը «Օդանավակայանի ընտրություն», «Թռիչքի ամսաթիվ» մուտքագրման դաշտը, «Սեղանի վահանակ» վահանակը երկու էջով՝ «Ժամանումներ» և «Մեկնումներ», մինչդեռ ես հանեցի «Տարածել էջերի վրա» դրոշը: վահանակի հատկությունները և «Tableboard» աղյուսակի դաշտը »:
Վեբ ծառայության հետ փոխազդեցությունը տեղի է ունենում «հարցում-պատասխան» սկզբունքով, և վեբ ծառայության համար ստեղծվում է հատուկ միջնորդ օբյեկտ: Հետևաբար, ես ավելացրեցի «ServiceAeroflot» ձևի մանրամասները հատուկ տեսակի:
Եթե ​​ուշադիր կարդաք ծառայության նկարագրությունը, կարող եք տեսնել, որ վեբ ծառայությունը տրամադրում է տվյալներ ժամանումների և մեկնումների վերաբերյալ՝ համապատասխանաբար Ժամանում և Մեկնում մեթոդներով զանգերի միջոցով: Այս դեպքում երկու մեթոդներն էլ որպես պարամետրեր վերցնում են օդանավակայանի կոդը և ցանկալի ամսաթիվը: Բացի այդ, վեբ ծառայությունը հնարավորություն է տալիս ստանալ այն օդանավակայանների ցանկը, որոնց վերաբերյալ տվյալներ կան համակարգում: Վեբ ծառայության հետ փոխգործակցության հետևյալ սցենարը միանգամայն ակնհայտ է.
1. Ստացեք օդանավակայանների ցանկը;
2. Ընտրեք ցանկալի օդանավակայանը և ամսաթիվը;
3. Ստացեք տվյալներ ժամանումների կամ մեկնումների մասին;
Բայց նախքան վեբ ծառայություն մուտք գործելը, դուք պետք է նախաստորագրեք միջնորդ օբյեկտ (օրինակ, WSProxy), ինչը ես արեցի ձևաթղթի բացման կարգավորիչում.
ServiceAeroflot=WSLinks.Aeroflot.CreateWSProxy(" http: //www.aeroflot.ru/», «FlightStatus», «FlightStatusSoap»);
Առաջին պարամետրը վեբ ծառայության անվանատարածքի URI-ն է: Դուք կարող եք դա պարզել՝ բացելով վեբ ծառայության հատկությունները WS կապի ծառում։ Երկրորդ և երրորդ պարամետրերը փոխանցում են համապատասխանաբար վեբ ծառայության անվանումը և նավահանգիստը:
(մի շփոթեք «անուն», «պորտ», «պրոքսի» և այլն հասկացությունները, որոնք կիրառվում են վեբ ծառայությունների համար TCP/IP արձանագրության ավելի ծանոթ հասկացությունների հետ: Եթե դրանց միջև համապատասխանություն կա, ապա դա բավականին իմաստային է: Ընդհանուր դեպքում դուք պետք է հասկանաք, որ, օրինակ, վեբ ծառայության պորտը և TCP պորտը բոլորովին տարբեր բաներ են):
Այսպիսով, ես սկզբնավորեցի WSProxy տիպի Aeroflot Service օբյեկտը, որն ըստ էության հանդիսանում է վեբ ծառայության «փաթաթան»: Դրա միջոցով ես կարող եմ մուտք գործել վեբ ծառայության մեթոդներ՝ որպես հարթակի «բնական» մեթոդներ։
Առաջին հերթին ես ստացա օդանավակայանների ցանկը և լրացրեցի «Ընտրել օդանավակայան» ընտրության դաշտի ցանկը.

SelectionList=FormElements.AirportSelection.SelectionList; SelectionList.Clear(); AirportList=Aeroflot Service.AirportList().GetList("list"); TotalAirports=ListAirports.Count(); Համար ui=0 to TotalAirports-1 Cycle Airport=ListAirports.Get(ներ); SelectionList.Add(Airport.code, ""+Airport.city+" : "+Airport.name); End Cycle;
Այստեղ մեզ անհրաժեշտ է մի փոքրիկ մեկնաբանություն Airport List = ServiceAeroflot.AirportList().GetList("list");
Փաստն այն է, որ վեբ ծառայության մեթոդներով վերադարձված արժեքները հարթակում ներկայացված են XDTO Object տեսակի օբյեկտներով: Քանի որ XDTO տեխնոլոգիայի թեման դուրս է այս հոդվածի շրջանակներից, ես կասեմ միայն դրա համար փոխակերպումներայս օբյեկտը ցուցակի մեջ է (որն այն է), ես անվանեցի դրա GetList() մեթոդը: Մնացած ծածկագիրը բավականին ակնհայտ է, ներառյալ Օդանավակայանի կառուցվածքի դաշտերի անվանումները, որոնք ես գտա վեբ ծառայության նկարագրության էջում։
Այժմ դուք կարող եք գործարկել կոնֆիգուրացիան և համոզվել, որ ընտրության դաշտի ցանկը լցված է օդանավակայանների անուններով.

«Հեռանալու օր, ժամանման օր...».

Հիմա ես գրեթե ամեն ինչ պատրաստ եմ, որպեսզի իմ ցուցատախտակը գործի: Մնում է «նկարել ու դեն նետել» :) Ահա թե ինչ կանեմ.

Ընթացակարգ FillTableboard(Arrival=True) TableTableboard.Columns.Clear(); TableTableboard.Columns.Add («Թռիչքի կոդը», «Թռիչքի կոդը»); TableTableboard.Columns.Add(" Ավիաընկերության կոդը", "Airline"); TableTable.Columns.Add("FlightNumber", "Number"); TableTable.Columns.Add(" Օդանավակայանի տրանզիտ", "Օդանավակայանի տարանցում"); TableTable.Columns.Add("Օդանավակայան", "Օդանավակայան"+?(Ժամանումներ, մեկնումներ","ժամանումներ")); TableTable.Columns.Add(" Ժամանակացույց", "On ժամանակացույցով"); TableTableboard.Columns.Add(" Պլանավորված ժամանակ", "Planned"); TableTableboard.Columns.Add(" TimeActual«, «Փաստացի»); TableTable.Columns.Add («Հաշվարկված ժամանակ», «Հաշվարկված»); TableTable.Columns.Add («Վայրէջքի ժամանակ», ?(Ժամանում, վայրէջք», «Թռիչք»)); Աղյուսակ: Սյունակներ: Ավելացնել («Համակցված թռիչք», «Համակցված թռիչք»); TableTable.Columns.Add («Կարգավիճակ», «Կարգավիճակ»); Եթե ոչ ժամանումը, ապա TableTable.Columns.Add («Գրանցում», «Գրանցում»); TableTable .Սյունակներ .Ավելացնել("Վայրէջք", "Վայրէջք"); EndIf; Ձևի տարրեր. Ցուցատախտակի աղյուսակ. Ստեղծել սյունակներ(); Ձևի տարրեր. Ցուցատախտակի աղյուսակ. Սյունակներ. Թռիչքի կոդ. Տեսանելիություն = Սխալ; Եթե ոչ Ժամանում, ապա ձևի տարրեր. Ցուցատախտակ Աղյուսակ. Սյունակներ. Մոտավոր ժամանակ. Տեսանելիություն = Սխալ; Վերջ Եթե; Եթե Ժամանում, Ապա Տվյալներ = Աերոֆլոտ Ծառայություն. Ժամանում (Օդանավակայանի ընտրություն, Թռիչքի ամսաթիվ). Ստացեք ցուցակ («ցուցակ»); Հակառակ դեպքում Տվյալներ=Աերոֆլոտ ծառայություն. Մեկնում (օդանավակայանի ընտրություն, թռիչք Ամսաթիվ): Ստացեք ցուցակ ("ցուցակ"); EndIf; Ընդհանուր գրառումներ=Տվյալներ.Համար(); ii=0 համար TotalRecords-1 ցիկլի գրառում=DATA.Get(ներ); NewRow=TableTable.Add(); NewRow: AirlineCode=Record.company; NewLine.FlightNumber = Entry.flight_no; NewLine.AirportTransit = Entry.airport_inter; NewLine.Airport = Entry.airport; NewLine.TimeSchedule=Record.sched; NewLine.TimePlanned=Record.plan; NewLine.TimeActual=Գրառել.փաստ; NewLine.TimeCalculated=Record.calc; NewLine.LandingTime=Record.real; NewLine.UnionFlight=Record.union_flight_no; NewRow.Status=Record.status; If Not Arrival then NewLine.Registration=Record.is_check; NewLine.Landing = Entry.is_board; վերջԵթե; End Cycle; Ընթացակարգի ավարտը

Որպեսզի ստուգեմ, թե ինչպես է այդ ամենը աշխատում, ես ձևի հրամանի վահանակին ավելացրի «Թարմացնել» կոճակը՝ համապատասխան նկարով, և դրա մշակիչում գրեցի հետևյալը.

Ընթացակարգ CommandPanel1 Update(Button) FillTableboard(FormElements.TableboardPanel.CurrentPage=FormElements.TableboardPanel.Pages.Arrivals); Ընթացակարգի ավարտը
Ես պահպանում եմ, գործարկում, ընտրում, սեղմում, ստանում.

Հետբառ

Զարմանալիորեն հոդվածը գրվելուց և հրապարակվելուց հետո պարզվեց, որ հարգարժան ZAV-ն արդեն հրապարակել է նմանատիպ օրինակ IT-Land-ում. http://itland.ru/biblio/detail.php?ID=1060
Գրագողության հնարավոր մեղադրանքներից խուսափելու համար խստորեն խորհուրդ եմ տալիս կարդալ այս հոդվածը և համեմատել հեղինակների մոտեցումները։

Տպել (Ctrl+P)

Վեբ ծառայությունների մեխանիզմը 1C:Enterprise համակարգում սպասարկման վրա հիմնված ճարտարապետության (SOA) աջակցության միջոց է:
Ծառայության վրա հիմնված ճարտարապետությունը կիրառական ճարտարապետություն է, որտեղ բոլոր գործառույթները սահմանվում են որպես անկախ ծառայություններ՝ կանչվող միջերեսներով: Այս ծառայություններին որոշակի հաջորդականությամբ մուտք գործելը թույլ է տալիս իրականացնել այս կամ այն ​​բիզնես գործընթաց:
Ծառայությունների վրա հիմնված ճարտարապետությունը նոր մոտեցում է առաջարկում բաշխված տեղեկատվական համակարգեր ստեղծելու համար, որոնցում ծրագրային ապահովման ռեսուրսները դիտվում են որպես ցանցի միջոցով մատուցվող ծառայություններ: Այս մոտեցումը թույլ է տալիս բաշխված բաղադրիչների (ծառայությունների) արագ համախմբումը մեկ լուծման մեջ՝ աջակցելու կոնկրետ բիզնես գործընթացներին:
Վեբ ծառայությունների մեխանիզմը թույլ է տալիս օգտագործել 1C:Enterprise համակարգը որպես ծառայությունների մի շարք բարդ բաշխված և տարասեռ համակարգերում, ինչպես նաև թույլ է տալիս այն ինտեգրել այլ արդյունաբերական համակարգերի հետ՝ օգտագործելով սպասարկման վրա հիմնված ճարտարապետություն:
1C:Enterprise համակարգի կոնֆիգուրացիան կարող է արտահանել իր ֆունկցիոնալությունը վեբ ծառայությունների միջոցով: Վեբ ծառայության սահմանումները նշված են կազմաձևման ծառում և հասանելի են դառնում բոլորի համար տեղեկատվական համակարգերդրանք հրապարակելով վեբ սերվերում:
Բացի այդ, 1C:Enterprise համակարգը կարող է մուտք գործել երրորդ կողմի վեբ ծառայություններ ինչպես կազմաձևման ծառում սահմանված ստատիկ հղումների, այնպես էլ ներկառուցված լեզվով ստեղծված դինամիկ հղումների միջոցով: Բրինձ. 1. Վեբ ծառայություններ

1C:Enterprise 8 համակարգի սպասարկման ճարտարապետության հիմքում սպասարկման մենեջերն է: Սպասարկման մենեջերը կատարում է հետևյալ գործառույթները.
● տեղեկատվական բազաների հետ կապերի ֆոնդի կառավարում;
● WSDL ծառայության նկարագրության աջակցություն;
● SOAP արձանագրության ներդրում, հաղորդագրությունների սերիականացում, համապատասխան ծառայության զանգահարում։
Ծառայության մենեջերն աշխատում է ծառայության հյուրընկալող գործընթացում, որն իրականացնում է ծառայության կառավարիչից/դեպի հաղորդագրություններ ստանալու/փոխանցելու գործառույթը: IIS կամ Apache վեբ սերվերը կարող է օգտագործվել որպես ծառայության հոսթ:
Ծառայությունների կառավարիչը պարունակում է կապերի մի լողավազան, որի միջոցով փոխազդեցություն է տեղի ունենում 1C:Enterprise համակարգի տվյալների բազաների հետ:
1C:Enterprise համակարգում ներդրված վեբ ծառայությունների մեխանիզմը աջակցում է հետևյալ ստանդարտներին.
● SOAP 1.1,
● Օճառ 1.2,
● WSDL 1.1,
● WS-I Հիմնական պրոֆիլ 1.1,
● HTTP 1.1,
● TLS 1.x (TLS 1.1-ը և 1.2-ն աջակցվում են, եթե հաճախորդի վկայականը չի պահանջվում ուղարկել սերվեր), ներառյալ գաղտնագրման ալգորիթմները,
համապատասխան ԳՕՍՏ Ռ 34.10-2001, Ռ 34.10-94, Ռ 34.11-94 և 28147-89;
● MTOM;
● Նույնականացում. Հիմնական, NTLM/Բանակցել:

Վեբ ծառայություն մուտք գործելու համար դուք պետք է օգտագործեք հասցե, որը ձևավորվում է հետևյալ կերպ.

http://host/base/ws/WebServiceName

Http://host/base/ws/WebServiceAddress.

Եկեք մանրամասն նայենք հասցեի բաղադրիչներին.

http://host/base-ը սովորական URL է, որն օգտագործվում է մուտք գործելու համար, օրինակ, վեբ հաճախորդ օգտագործող տեղեկատվական բազա: Եթե ​​առկա են սահմանազատիչներ, Z պարամետրի միջոցով սահմանազատող արժեքների նշումը չի ապահովվում հրամանի տողգործարկել հաճախորդի հավելվածը:

ws-ը նշան է, որ վեբ ծառայություն մուտք է գործում (ի տարբերություն hs-ի, որը սահմանում է մուտք դեպի HTTP ծառայություն, տես այստեղ):

WebServiceName – վեբ ծառայության անվանումը: Սահմանել Վեբ ծառայության օբյեկտի հատկությունը:

WebServiceAddress – նկարագրում է վեբ ծառայություն մուտք գործելու այլընտրանքային անուն: Այն դրված է Վեբ ծառայության օբյեկտի Publishing file name հատկության մեջ: Այն կարող է փոփոխվել Վեբ ծառայությունը հրապարակելիս:

WebServiceName անունով և վեբ ծառայության WebServiceAddress հասցեով զանգերը համարժեք են:

Վեբ ծառայությունների միջոցով ֆունկցիոնալության ապահովում

Որպեսզի 1C:Enterprise համակարգի ֆունկցիոնալությունը հասանելի դառնա վեբ ծառայությունների արտաքին սպառողների համար, դուք պետք է կատարեք հետևյալ քայլերը.
● ստեղծել անհրաժեշտ թվով վեբ ծառայություններ կոնֆիգուրացիայի մեջ,
● հրապարակել վեբ ծառայությունները հատուկ կոնֆիգուրատորի գործիքի միջոցով:
Վեբ ծառայությունների հրապարակման ընթացակարգի նկարագրությունը և 1C:Enterprise մուտք գործելու համար Reverse Proxy-ի օգտագործման նկարագրությունը գրված է 7-րդ գլխում «Ադմինիստրատորի ուղեցույց» ITS սկավառակի վրա:
Վեբ ծառայության ստեղծումը բաղկացած է.
● ավելացնելով վեբ ծառայության կազմաձևման օբյեկտ մետատվյալների ծառին,
● այն գործողությունների նկարագրությունը, որը կարող է կատարել ստեղծված վեբ ծառայությունը,
● Վեբ ծառայության գործառնությունների պարամետրերի նկարագրությունը:
Վեբ ծառայության կազմաձևման օբյեկտը պարունակում է մոդուլ, որտեղ ներկառուցված լեզվով ստեղծվում են ընթացակարգեր, որոնք կատարվում են, երբ կանչվում են վեբ ծառայության որոշակի գործողություններ: Վեբ ծառայության գործարկման պարամետրերի տեսակները նկարագրված են XDTO տեսակների միջոցով և կարող են լինել կամ XDTO արժեքներ կամ XDTO օբյեկտներ:
Վեբ ծառայությունը կոչվում է հետևյալ կերպ.
● հետ կապի լողավազանից ընտրված է համապատասխան միացում տեղեկատվական բազան; եթե չկա պահանջվող կապ, ստեղծվում է կապ.
● ստեղծվում է նոր նիստ, և ստեղծված նիստի համար բարձրացվում է իրադարձություն SettingSessionParameters(սեսիայի մոդուլում);
● կանչվում է պահանջվող վեբ ծառայության մեթոդը և կանչվում է մշակիչը SettingSessionParameters()(սեսիայի մոդուլում) ամեն անգամ, երբ մուտք է գործում չնախնականացված նստաշրջանի պարամետր:
ԽՈՐՀՈՒՐԴ. Խորհուրդ չի տրվում իրականացնել ռեսուրսների ինտենսիվ գործողություններ իրադարձությունների մշակիչում SettingSessionParameters.
Իրադարձություն SettingSessionParametersՍեսիայի մոդուլը կանչվում է սերվերի վրա արտոնյալ ռեժիմով: Զանգված ծառայության մոդուլը գործարկվում է
սերվեր նորմալ ռեժիմում:
Սեսիայի մոդուլն օգտագործվում է նիստի պարամետրերը սկզբնավորելու և հրամանների որոշակի փաթեթ կատարելու համար 1C:Enterprise համակարգի ցանկացած վեբ ծառայություն զանգահարելիս:

Վեբ ծառայության իրականացման օրինակ

Օրինակ, դուք պետք է ստեղծեք 1C:Enterprise համակարգի վեբ ծառայություն, որը պետք է վերադարձնի իր աղյուսակային մասի կազմը՝ օգտագործելով փոխանցված հաշիվ-ապրանքագրի համարը: Նմանատիպ օրինակ, օգտագործելով HTTP ծառայությունները, կքննարկվի մեկ այլ հոդվածում:
Վերադարձի արժեքը նկարագրելու համար եկեք ստեղծենք XDTO փաթեթ Հաշիվ-ապրանքագրի տվյալներանվանատարածքով http://www.MyCompany.ru/shipment,պարունակում է երեք տեսակի XDTO օբյեկտներ.
● Nomenclature – Nomenclature directory տարրից տվյալներ փոխանցելու համար: Այս XDTO օբյեկտի տեսակը կպարունակի հետևյալ հատկությունները.
● Անուն – տողի տեսակը անվանատարածքից
Ամբողջական անուն- տողի տեսակը անվանատարածքից http://www.w3.org/2001/XMLSchema;
● Շտրիխ կոդ – տողի տեսակը անվանատարածքից http://www.w3.org/2001/XMLSchema;
● PurchasePrice – int մուտքագրեք անվանատարածքից http://www.w3.org/2001/XMLSchema.
Հաշիվ-ապրանքագրի տող- հաշիվ-ապրանքագրի մեկ տողով տվյալներ փոխանցելու համար: Այս XDTO օբյեկտի տեսակը կպարունակի հետևյալ հատկությունները.
● Անվանակարգ – անվանատարածքից մուտքագրեք Անվանակարգ; հղում է XDTO օբյեկտին,
որը մենք սահմանեցինք վերևում;
● Քանակ – int տեսակը անվանատարածքից http://www.w3.org/2001/XMLSchema;
● Գին – int մուտքագրեք անվանատարածքից http://www.w3.org/2001/XMLSchema;
● Sum – int տեսակը անվանատարածքից http://www.w3.org/2001/XMLSchema:
Վաճառքի հաշիվ-ապրանքագիր- հաշիվ-ապրանքագրի բոլոր տողերի վերաբերյալ տվյալները փոխանցելու համար: Այս XDTO օբյեկտի տեսակը կպարունակի մեկ հատկություն.
● Կազմը – տեսակ Հաշիվ-ապրանքագրի տողանունների տարածությունից http://www.MyCompany.ru/shipment. Ներկայացնում է հղում XDTO օբյեկտին,
որը մենք սահմանեցինք վերևում: Որպեսզի այս հատկությունը պահպանի անսահմանափակ թվով արժեքներ, դուք պետք է այն սահմանեք
գույք Վերին սահմանը -1.
Երբ ստեղծվեն անհրաժեշտ XDTO տեսակները, դուք պետք է նոր վեբ ծառայություն ավելացնեք կազմաձևում Հաշիվ-ապրանքագրի տվյալներգույքի հետևյալ արժեքներով.

Անվանատարածքի URI – http://www.MyCompany.ru/shipment;
● XDTO փաթեթներ – Հաշիվ-ապրանքագրի տվյալներ;
Հրապարակման ֆայլի անվանումը– առաքում.1cws.
Ստեղծված վեբ ծառայությունը պետք է ունենա Get օպերացիան սահմանված հետևյալ հատկության արժեքներով.
Վերադարձի տեսակըՎաճառքի հաշիվ-ապրանքագիրանունների տարածությունից http://www.MyCompany.ru/shipment;
Հնարավոր դատարկ արժեք- Տեղադրվել;
● Ընթացակարգի անվանումը – Ստացեք:
Get գործողության համար դուք պետք է սահմանեք DocumentNumber պարամետրը հետևյալ հատկության արժեքներով.
● Արժեքի տեսակ – տողի տեսակը անվանատարածքից http://www.w3.org/2001/XMLSchema;
Փոխանցման ուղղություն – Մուտք.
Դրանից հետո դուք պետք է բացեք ստեղծված վեբ ծառայության մոդուլը և այս մոդուլում տեղադրեք Get() ֆունկցիան, որը կկատարվի այս վեբ ծառայության կանչի ժամանակ։

Գործառույթ Ստացեք (Փաստաթղթի համարը) Արտահանում // Ստացեք հաշիվ-ապրանքագրի օբյեկտը անցած համարով DocumentLink = Documents.Invoice. FindByNumber (Փաստաթղթի համարը, ընթացիկ ամսաթիվը ());Եթե DocumentLink.Empty()Հետո Վերադարձեք չսահմանված;վերջԵթե; Փաստաթուղթ = DocumentLink.GetObject(); // Ստացեք XDTO օբյեկտների տեսակները Անվանակարգի տեսակը= FactoryXDTO.Type («http://www.MyCompany.ru/shipment», «Nomenclature»); InvoiceType = FactoryXDTO.Type(«http://www.MyCompany.ru/shipment», «Invoice»); Invoice LineType = FactoryXDTO.Type(«http://www.MyCompany.ru/shipment», «Invoice Line»); // Ստեղծեք XDTO հաշիվ-ապրանքագրի օբյեկտ Invoice = FactoryXDTO.Create(InvoiceType); Document.Composition ցիկլի յուրաքանչյուր փաստաթղթի տողի համար // Ստեղծել հաշիվ-ապրանքագրի տող XDTO օբյեկտներ // և նոմենկլատուրաներ Invoice Line = FactoryXDTO.Ստեղծել (InvoiceStringType); Նյութ = FactoryXDTO.Create(NomenclatureType); // Լրացրեք նյութի հատկությունները Nomenclature.Name = Document Line.Nomenclature.Name; Nomenclature.FullName = Document Line.Nomenclature.FullName; Nomenclature.Barcode = Document Line.Nomenclature.Barcode; Item.PurchasePrice = DocumentLine.Nomenclature.PurchasePrice; // Լրացրեք սպառվող ապրանքագրի տողի հատկություններըրդ Invoice Line.Item = Նյութ; Invoice Line.Quantity = Document Line.Quantity; Invoice Line.Price = Document Line.Price; Invoice Line.Amount = Փաստաթղթի Line.Amount; // Ավելացնել հաշիվ-ապրանքագրի տող Invoice.Composition.Add(InvoiceString); End Cycle; // Վերադարձեք հաշիվ-ապրանքագիրըՎերադարձ Վաճառքի հաշիվ-ապրանքագիր; EndFunction

Երրորդ կողմի վեբ ծառայությունների հետ աշխատելը

1C:Enterprise համակարգը կարող է օգտագործել այլ մատակարարների կողմից տրամադրվող վեբ ծառայությունները մի քանի ձևով.
● օգտագործելով ստատիկ հղումներ, որոնք ստեղծված են կազմաձևման ծառում;
● օգտագործելով ներկառուցված լեզվական գործիքներով ստեղծված դինամիկ հղումներ;
● նախորդ մեթոդների համադրություն.
Ստատիկ հղումների օգտագործման առավելությունն ավելի մեծ արագությունն է, քանի որ մատակարարի վեբ ծառայության նկարագրությունը ստացվում է միայն մեկ անգամ՝ հղումը ստեղծելիս։ Հետագայում այս վեբ ծառայություն մուտք գործելիս օգտագործվում է վեբ ծառայության առկա նկարագրությունը:
Դինամիկ հղումներ օգտագործելիս մատակարարի վեբ ծառայության նկարագրությունը կստանա 1C:Enterprise համակարգը ամեն անգամ, երբ վեբ ծառայությունը կանչվի, ինչը, բնականաբար, կդանդաղեցնի այս վեբ ծառայության հետ աշխատանքը: Այնուամենայնիվ, այս մոտեցման առավելությունը մատակարարի վեբ ծառայության արդի նկարագրություն ստանալու հնարավորությունն է: Ստատիկ հղումներ օգտագործելիս վեբ ծառայության ընթացիկ նկարագրությունը ստանալու համար դուք պետք է նորից ներմուծեք WSDL նկարագրությունը՝ օգտագործելով կոնֆիգուրատորը և պահպանեք փոխված կոնֆիգուրացիան:
Հավելվածային լուծումների գործարկման ժամանակ կարող է առաջանալ մի իրավիճակ, երբ նույն վեբ ծառայությունը տրամադրվում է տարբեր հասցեներով (URL), բայց ունի ճիշտ նույն նկարագրությունը (WSDL): Այս դեպքում անհրաժեշտություն կա բեռնել վեբ ծառայության նկարագրությունը կոնֆիգուրացիայի մեջ (ստեղծել օբյեկտ կոնֆիգուրացիայի օբյեկտների ծառում), բայց օգտագործման ընթացքում նշեք կոնկրետ հասցեն, որտեղ գտնվում է վեբ ծառայությունը: Համակցված մեթոդը թույլ է տալիս աշխատել այս կերպ. Որպես օրինակ, դիտարկեք հետևյալ իրավիճակը. կա կրկնօրինակված վեբ ծառայություն, որը գործում է
որոշ գործառույթ: 1C:Enterprise-ում գրված կիրառական լուծումն օգտագործում է այս ծառայության ծառայությունները, մինչդեռ ծառայության հասցեն կարող է տարբեր լինել (ծառայությունը կրկնօրինակելի է), և նկարագրությունը ամրագրված է: Այնուհետև վեբ ծառայության նկարագրությունը կարող է բեռնվել հավելվածի լուծման մեջ, և հավելվածի լուծման կարգավորումներում նախատեսել մուտքագրել ծառայության կոնկրետ օրինակի հասցեն, որը (հասցեն) կօգտագործվի շահագործման ընթացքում:
Հասանելի է նաև մեկ այլ մեթոդ՝ օգտագործվում է դինամիկ հղում, սակայն վեբ ծառայության գտնվելու վայրի հասցեն չի ստացվում նկարագրության ֆայլից (WSDL), այլ ուղղակիորեն նշվում է օբյեկտը ստեղծելիս։
Երբ փորձում եք բեռնել վեբ ծառայության նկարագրությունը կոնֆիգուրատորում (ստատիկ հղում ստեղծելով) կամ դինամիկ հղում օգտագործելիս (օգտագործելով WS Definition օբյեկտը), համակարգը ստուգում է բեռնված վեբ ծառայության նկարագրությունը (WSDL): Եթե ​​վեբ ծառայության նկարագրության մեջ սխալ կա (1C:Enterprise համակարգի «տեսանկյունից»), ապա նկարագրությունը չի բեռնվի և կստեղծվի բացառություն: Բացառության տեքստը կպարունակի ներբեռնման ձախողման պատճառների մանրամասն ախտորոշում: WSDL-ի սխալները թվարկված են այն հերթականությամբ, որով դրանք հանդիպել են: WSDL-ի յուրաքանչյուր սխալ պարունակում է հետևյալ մանրամասն նկարագրությամբ գրառում.

<Тип элемента с ошибкой>.<Имя>
[<Тип элемента с ошибкой>.<Имя>[…]]
<Описание ошибки>
<Тип элемента с ошибкой>
<Имя>
Այս նկարագրության մեջ.
● Սխալով տարրի տեսակը WSDL տարրի տեսակն է: Ամենից հաճախ համապատասխանում է վեբ ծառայությունը նկարագրող xml ֆայլի պիտակի անվանը:
● Սխալի նկարագրություն – կոնկրետ սխալի նկարագրություն:
● Անուն — WSDL օբյեկտի անվանումը, որտեղ տեղի է ունեցել սխալը:

Ստատիկ WS հղում օգտագործելու օրինակ

Որպես երրորդ կողմի վեբ ծառայությունների օգտագործման օրինակ, հաշվի առեք զանգահարել վեբ ծառայություն, որը նախկինում ստեղծվել է վերը նշված օրինակում

Առաջին հերթին, դուք պետք է ավելացնեք նոր WS-հղման կոնֆիգուրացիայի օբյեկտ՝ Invoice Data անունով, կազմաձևման ծառին, որը վերաբերում է հրապարակված ծառայությանը: Դա անելու համար ներմուծեք հրապարակված ծառայության WSDL նկարագրությունը և նշեք որպես URL http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl. WSDL նկարագրության ներմուծման նկարագրությունը գրված է մեկ այլ հոդվածում:
Դրանից հետո, օրինակ, հաշիվ-ապրանքագրի մոդուլում կարող եք ստեղծել ստորև ներկայացված ընթացակարգը: Այն լրացնում է փաստաթղթի աղյուսակային մասը մատակարարի վեբ ծառայության միջոցով ստացված մատակարարի հաշիվ-ապրանքագրերով:

Ընթացակարգը GetDataConsumableInvoice(Մատակարարի հաշիվ-ապրանքագրի համարը) Վստահված անձ = WSLinks.InvoiceData: Ստեղծել WSPProxy («http://www.MyCompany.ru/shipment», «Invoice Data», «Invoice Data»); InvoiceData = Proxy.Get(); Եթե Հաշիվ-ապրանքագրի տվյալներ = Չսահմանված ՀետոՎերադարձ; վերջԵթե; // Լրացրեք հաշիվ-ապրանքագիրը ստացված տվյալներովՅուրաքանչյուր LineInvoice Data.Composition ցիկլի համար NewRow = DocumentObject.Composition.Add(); NewLine.Quantity = RowIncl.Quantity; NewLine.Price = LineIncl.Price; NewLine.Amount = RowIncl.Amount; // Գտեք անվանացանկի տարրը՝ օգտագործելով փոխանցված տվյալները // (օրինակ, շտրիխ կոդով) NewLine.Nomenclature = Directories.Nomenclature. FindByDetails(«Շտրիխ կոդ», LineInk.Nomenclature.Շտրիխ); End Cycle; Ընթացակարգի ավարտը

Եթե ​​ծառայության իրական գտնվելու վայրի հասցեն տարբերվում է այն հասցեից, որն օգտագործվել է վեբ ծառայության նկարագրությունը կոնֆիգուրացիայի մեջ բեռնելիս,
ապա նոր հասցեն պետք է հստակորեն նշվի WSProxy օբյեկտը ստեղծելիս.

Դինամիկ WS հղում օգտագործելու օրինակ

Դինամիկ կապի օգտագործումը տարբերվում է ստատիկ հղումից միայն այն ձևով, որով ստեղծվում է WS վստահված անձը, և կարիք չկա ստեղծել WS հղում կոնֆիգուրացիայի ծառում:
Եթե ​​համեմատենք նախորդ բաժնում ներկայացված օրինակի հետ, ապա, ի տարբերություն ստատիկ հղման վրա հիմնված պրոքսի ստեղծելու, դինամիկ հղում օգտագործելիս, WS վստահված անձը ստեղծվում է հետևյալ կոնստրուկտորի միջոցով.

// Ստեղծեք WS վստահված անձ՝ հիմնվելով WS սահմանման վրա
Սահմանում = Նոր WSD սահմանում («http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl»);
Proxy = New WSPProxy (Սահմանում, «http://www.MyCompany.ru/shipment», «Invoice Data», «Soap Invoice Data»);
Ստատիկ հղման վրա հիմնված WS վստահված անձ ստեղծելիս այսպիսի տեսք ունի.

// Ստեղծեք WS վստահված անձի հղման հիման վրա
Վստահված անձ = WSLinks.InvoiceData: CreateWSProxy («http://www.MyCompany.ru/shipment», «InvoiceData», «InvoiceData»);
Եթե ​​ծառայության իրական գտնվելու վայրի հասցեն տարբերվում է WSDL ֆայլում նշված հասցեից, որն օգտագործվում է վեբ ծառայությունների սահմանումը ստեղծելու համար, ապա նոր հասցեն պետք է հստակորեն նշվի WSProxy օբյեկտը վեբ ծառայությունների սահմանումից ստեղծելիս.

// Ստեղծեք WS վստահված անձ՝ հիմնվելով WS սահմանման վրաՍահմանում = Նոր SDDefinitions ("http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl"); Proxy = Նոր WSPProxy (Սահմանում, «http://www.MyCompany.ru/shipment», «Invoice Data», «Invoice DataSoap»,);

Վեբ ծառայության հատկությունների խմբագրում

Հիմնական ներդիրում մուտքագրեք օբյեկտի անունը, հոմանիշը և մեկնաբանությունը:
Գործողություններ ներդիրում ստեղծվում են ենթակա Գործողությունների օբյեկտներ, որոնք, իր հերթին, կարող են ունենալ ստորադաս Պարամետրերի օբյեկտներ, որոնք անհրաժեշտ են այս տեսակի օբյեկտների հետ աշխատելու համար: Ստորադաս օբյեկտների նկարագրությունը կատարվում է հատկությունների ներկապնակում:

Գործողության հատկություններ

Բացի կազմաձևման օբյեկտների ընդհանուր հատկություններից, վեբ ծառայության գործողությունը պարունակում է հետևյալ հատկությունները.

● Վերադարձի արժեքի տեսակ – արժեքի տեսակը, որը վերադարձնում է վեբ ծառայության գործողությունը: Կարող է լինել XDTO արժեքի տեսակ կամ օբյեկտի տեսակ
XDTO.
● Null Possible — Ցույց է տալիս, թե արդյոք վերադարձվող արժեքը կարող է լինել զրոյական:
● Գործարքում – ցույց է տալիս, թե արդյոք վեբ ծառայության մոդուլի կոդը կկատարվի գործարքի ժամանակ, թե ոչ: Եթե ​​հատկությունը սահմանված է, ապա երբ վեբ ծառայությունը կանչվի, գործարքը ավտոմատ կերպով կսկսվի, և երբ վեբ ծառայությունն ավարտվի, գործարքը կամ կկատարվի, կամ գործարքը հետ կվերցվի (կախված կատարման արդյունքներից): Եթե ​​հատկությունը սահմանված չէ, երբ վեբ ծառայության մոդուլը սկսում է գործարկել
գործարքը չի սկսվի.
● Մեթոդի անվանում – Վեբ ծառայության մոդուլի արտահանվող ընթացակարգի անվանումը, որը կկատարվի այս հատկությունը կանչելիս:
Ենթահամակարգեր ներդիրը ցույց է տալիս, թե այս տեսակի օբյեկտները որ ենթահամակարգերին են պատկանում:
Այլ ներդիրում սահմանվում են հետևյալ հատկությունները.
● Անվանատարածության URI — պարունակում է վեբ ծառայության անվանատարածքի URI: Յուրաքանչյուր վեբ ծառայություն կարող է եզակիորեն նույնականացվել իր կողմից
անվանումը և URI, որին այն պատկանում է: Ծառայության անվանումների տարածքը չպետք է լինի նույնը, ինչ հայտնի անունների տարածքները, որոնք արդեն օգտագործվում են կամ վերապահված են այլ կազմակերպությունների կողմից: Խորհուրդ է տրվում, որ ծառայության անվանումների տարածքը ներառի մի հատված, որը եզակի է վեբ ծառայությունը մշակող կազմակերպության համար: Օրինակ, Promresurs կոչվող կազմակերպության համար իմաստ ունի բոլոր անվանատարածքները սկսել նախածանցով, օրինակ՝ http://promresurs.com: Այնուհետև վեբ ծառայության անվանատարածքի URI-ն նման կլինի http://promresurs.com/public/services/OurService.
● XDTO փաթեթներ – XDTO փաթեթների ցանկ, որոնց տեսակները կարող են օգտագործվել որպես վեբ ծառայության գործառնական վերադարձի տեսակներ և գործառնական պարամետրերի տեսակներ:
● Հրապարակման ֆայլի անվանում – Վեբ ծառայության նկարագրության ֆայլի անվանումը, որը գտնվում է վեբ սերվերում:
Սեղմելով Module կոճակը, բացվում է վեբ ծառայության մոդուլի խմբագրիչը:

Պարամետրային հատկություններ
Բացի կազմաձևման օբյեկտների ընդհանուր հատկություններից, Վեբ ծառայության գործառնական պարամետրը պարունակում է հետևյալ հատկությունները.
● Արժեքի տեսակ՝ Վեբ ծառայության գործառնական պարամետրի արժեքի տեսակը: Կարող է լինել XDTO արժեքի տեսակ կամ XDTO օբյեկտի տեսակ:
● Null Possible – ցույց է տալիս, թե արդյոք գործողության պարամետրի արժեքը կարող է զրո լինել:
● Հաղորդման ուղղություն – որոշում է տվյալների փոխանցման ուղղությունը՝ օգտագործելով այս պարամետրը: Հնարավոր արժեքներ.
● Մուտք – նշանակում է, որ պարամետրն օգտագործվում է տվյալների վեբ ծառայությանը փոխանցելու համար;
● Արդյունք – նշանակում է, որ պարամետրն օգտագործվում է վեբ ծառայությունից տվյալներ ստանալու համար;
● Մուտք-Ելք – նշանակում է, որ պարամետրը կարող է օգտագործվել ինչպես տվյալների փոխանցման, այնպես էլ վեբ ծառայությունից ստանալու համար:

Թեմայի վերնագիրը իսկապես հարցական է, քանի որ... Ես ինքս չգիտեմ, թե դա ինչ է և առաջին անգամ կփորձեմ աշխատել դրա հետ այս հոդվածի շրջանակներում: Միակ բանը, որ կարող եմ երաշխավորել, այն է, որ ստորև ներկայացված կոդը կաշխատի, բայց իմ արտահայտությունները կլինեն միայն ենթադրություններ և ենթադրություններ այն մասին, թե ես ինքս ինչպես եմ հասկանում այս ամենը։ Այսպիսով, եկեք գնանք ...

Ներածություն

Պետք է սկսել նրանից, թե ինչու է ստեղծվել վեբ ծառայությունների հայեցակարգը: Մինչ այս հայեցակարգը հայտնվեց աշխարհում, արդեն գոյություն ունեին տեխնոլոգիաներ, որոնք թույլ էին տալիս հավելվածներին փոխազդել հեռավորության վրա, որտեղ մի ծրագիր կարող էր որևէ մեթոդ կանչել մեկ այլ ծրագրում, որը կարող էր գործարկվել մեկ այլ քաղաքում կամ նույնիսկ երկրում գտնվող համակարգչի վրա: Այս ամենը կրճատված է որպես RPC (Remote Procedure Calling): Օրինակները ներառում են CORBA տեխնոլոգիաները, իսկ Java-ի համար՝ RMI (Remote Method Invoking): Իսկ նրանց մոտ ամեն ինչ կարծես թե լավ է, հատկապես CORBA-ում, քանի որ... Դուք կարող եք աշխատել դրա հետ ցանկացած ծրագրավորման լեզվով, բայց ինչ-որ բան դեռ բացակայում էր: Կարծում եմ, որ CORBA-ի թերությունն այն է, որ այն աշխատում է իր ցանցային որոշ արձանագրությունների միջոցով՝ պարզ HTTP-ի փոխարեն, որը տեղավորվում է ցանկացած firewall-ի միջոցով: Վեբ ծառայության գաղափարն էր ստեղծել RPC, որը կտեղադրվեր HTTP փաթեթների մեջ: Այսպիսով սկսվեց ստանդարտի մշակումը: Որո՞նք են այս ստանդարտի հիմնական հասկացությունները.
  1. Օճառ. Նախքան հեռակա ընթացակարգ կանչելը, դուք պետք է նկարագրեք այս զանգը XML ֆայլում SOAP ձևաչափով: SOAP-ը պարզապես XML նշումներից մեկն է, որն օգտագործվում է վեբ ծառայություններում: Այն ամենը, ինչ մենք ուզում ենք ինչ-որ տեղ ուղարկել HTTP-ի միջոցով, սկզբում վերածվում է XML SOAP-ի նկարագրության, այնուհետև լցվում է HTTP փաթեթի մեջ և ուղարկվում է ցանցի մեկ այլ համակարգչի՝ TCP/IP-ի միջոցով:
  2. WSDL. Կա վեբ ծառայություն, այսինքն. ծրագիր, որի մեթոդները կարելի է զանգահարել հեռակա կարգով: Բայց ստանդարտը պահանջում է, որ այս ծրագիրը ուղեկցվի նկարագրությամբ, որն ասում է, որ «այո, դուք իրավացի եք. սա իսկապես վեբ ծառայություն է, և դուք կարող եք զանգահարել այս կամ այն ​​մեթոդներից»: Այս նկարագրությունը ներկայացված է մեկ այլ XML ֆայլով, որն ունի այլ ձևաչափ, այն է՝ WSDL: Նրանք. WSDL-ը պարզապես XML ֆայլ է, որը նկարագրում է վեբ ծառայությունը և ոչ ավելին:
Ինչու՞ այդքան հակիրճ հարցնում եք. Ավելի կոնկրետ չե՞ք կարող ասել։ Հավանաբար դա հնարավոր է, բայց դա անելու համար դուք պետք է դիմեք այնպիսի գրքերի, ինչպիսիք են T. Mashnin, «Java Web Services»: Այնտեղ, ամբողջ առաջին 200 էջերում կա մանրամասն նկարագրություն SOAP և WSDL ստանդարտների յուրաքանչյուր պիտակ: Արժե՞ արդյոք անել: Իմ կարծիքով՝ ոչ, քանի որ... այս ամենը ավտոմատ կերպով ստեղծվում է Java-ում, և անհրաժեշտ է գրել միայն այն մեթոդների բովանդակությունը, որոնք ենթադրաբար պետք է կանչվեն հեռակա կարգով: Այսպիսով, Java-ում հայտնվեց JAX-RPC-ի նման API: Եթե ​​ինչ-որ մեկը չգիտի, երբ ասում է, որ Java-ն ունի այսինչ API, նշանակում է, որ կա մի փաթեթ դասերի հավաքածուով, որը ներառում է տվյալ տեխնոլոգիան: JAX-RPC-ն ժամանակի ընթացքում զարգացավ տարբերակից տարբերակ և ի վերջո դարձավ JAX-WS: WS-ն ակնհայտորեն նշանակում է WebService, և դուք կարող եք մտածել, որ սա պարզապես RPC-ի վերանվանումն է որպես մեր օրերի հանրաճանաչ բառ: Սա ճիշտ չէ, քանի որ Այժմ վեբ ծառայությունները հեռացել են սկզբնական գաղափարից և թույլ են տալիս ոչ միայն զանգահարել հեռավոր մեթոդներ, այլև պարզապես ուղարկել փաստաթղթերի հաղորդագրություններ SOAP ձևաչափով: Ես դեռ չգիտեմ, թե ինչու է դա անհրաժեշտ, քիչ հավանական է, որ այստեղ պատասխանը լինի «միայն այն դեպքում, եթե դա անհրաժեշտ լինի»: Ես ինքս կցանկանայի սովորել ավելի փորձառու ընկերներից։ Եվ վերջապես, JAX-RS-ը հայտնվեց այսպես կոչված RESTful վեբ ծառայությունների համար, բայց սա առանձին հոդվածի թեմա է։ Ներածությունը կարող է ավարտվել այստեղ, քանի որ... Հաջորդիվ կսովորենք աշխատել JAX-WS-ի հետ։

Ընդհանուր մոտեցում

Վեբ ծառայություններում միշտ կա հաճախորդ և սերվեր: Սերվերը մեր վեբ ծառայությունն է և երբեմն կոչվում է վերջնակետ (ինչպես վերջնակետը, որտեղ հասնում են հաճախորդի SOAP հաղորդագրությունները): Մենք պետք է անենք հետևյալը.
  1. Նկարագրեք մեր վեբ ծառայության ինտերֆեյսը
  2. Իրականացնել այս ինտերֆեյսը
  3. Գործարկեք մեր վեբ ծառայությունը
  4. Գրեք հաճախորդ և հեռակա կարգով զանգահարեք վեբ ծառայության ցանկալի մեթոդը
Դուք կարող եք վեբ ծառայություն գործարկել տարբեր ձևերով. կա՛մ նկարագրեք դասը հիմնական մեթոդով և գործարկեք վեբ ծառայությունը ուղղակիորեն որպես սերվեր, կա՛մ տեղադրեք այն սերվերի վրա, ինչպիսին է Tomcat-ը կամ որևէ այլ սերվեր: Երկրորդ դեպքում մենք ինքներս չենք գործարկվում նոր սերվերև մենք չենք բացում մեկ այլ նավահանգիստ համակարգչի վրա, այլ պարզապես ասում ենք Tomcat սերվիլետ կոնտեյներին, որ «մենք այստեղ գրել ենք վեբ ծառայության դասեր, խնդրում ենք հրապարակել դրանք, որպեսզի բոլորը, ովքեր կապվում են ձեզ հետ, կարողանան օգտվել մեր վեբ ծառայությունից»: Անկախ վեբ ծառայության գործարկման եղանակից, մենք կունենանք նույն հաճախորդը։

Սերվեր

Եկեք գործարկենք IDEA-ն և ստեղծենք նոր նախագիծ Ստեղծել նոր նախագիծ. Նշենք անունը Բարև ՎեբՍերվիսև սեղմեք կոճակը Հաջորդը, ապա կոճակը Ավարտել. Թղթապանակում srcեկեք ստեղծենք փաթեթ ru.javarush.ws. Այս փաթեթում մենք կստեղծենք HelloWebService ինտերֆեյսը. փաթեթ ru: javarush. ws; // սրանք ծանոթագրություններ են, այսինքն. մեր դասերը և մեթոդները նշելու միջոց, // կապված վեբ ծառայության տեխնոլոգիայի հետներմուծել javax. jws. Վեբ մեթոդ; ներմուծել javax. jws. Վեբ ծառայություն; ներմուծել javax. jws. օճառ. SOAPկապում; // մենք ասում ենք, որ մեր ինտերֆեյսը կաշխատի որպես վեբ ծառայություն@WebService // մենք ասում ենք, որ վեբ ծառայությունը կօգտագործվի մեթոդներ կանչելու համար@SOAPBinding (ոճ = SOAPBinding. Style. RPC) հանրային ինտերֆեյս HelloWebService ( // մենք ասում ենք, որ այս մեթոդը կարելի է զանգահարել հեռակա կարգով@WebMethod հանրային տող getHelloString(Տողի անունը) ; ) Այս կոդում WebService և WebMethod դասերը այսպես կոչված անոտացիաներ են և ոչինչ չեն անում, բացի մեր ինտերֆեյսը և դրա մեթոդը որպես վեբ ծառայություն նշելուց: Նույնը վերաբերում է SOAPBinding դասին: Միակ տարբերությունն այն է, որ SOAPBinding-ը պարամետրերով անոտացիա է: Այս դեպքում ոճի պարամետրը օգտագործվում է արժեքով, որը ցույց է տալիս, որ վեբ ծառայությունը կաշխատի ոչ թե փաստաթղթային հաղորդագրությունների միջոցով, այլ որպես դասական RPC, այսինքն. մեթոդ կանչելու համար։ Եկեք իրականացնենք մեր ինտերֆեյսի տրամաբանությունը և մեր փաթեթում ստեղծենք HelloWebServiceImpl դաս: Ի դեպ, ես նշում եմ, որ դասը Impl-ով ավարտելը Java-ում կոնվենցիա է, ըստ որի ինտերֆեյսների իրականացումն այդպես է նշանակված (Impl - իրականացման բառից, այսինքն. իրականացում): Սա պահանջ չէ, և դուք ազատ եք դասին անվանել ինչ ուզում եք, բայց լավ վարքագիծը դա է պահանջում՝ փաթեթ ru: javarush. ws; // նույն անոտացիան, ինչպես ինտերֆեյսը նկարագրելիս,ներմուծել javax. jws. Վեբ ծառայություն; // բայց այստեղ այն օգտագործվում է endpointInterface պարամետրով, // նշելով մեր վեբ ծառայության ինտերֆեյսի դասի լրիվ անվանումը@WebService(endpointInterface= «ru.javarush.ws.HelloWebService») հանրային դասը HelloWebServiceImpl-ն իրականացնում է HelloWebService ( @Override public String getHelloString (String name) ( // պարզապես վերադարձրեք ողջույնըվերադարձնել «Բարև, « + անուն + «!" ; ) ) Եկեք գործարկենք մեր վեբ ծառայությունը որպես անկախ սերվեր, այսինքն. առանց որևէ Tomcat-ի և հավելվածի սերվերների մասնակցության (սա առանձին քննարկման թեմա է): Դա անելու համար թղթապանակում գտնվող նախագծի կառուցվածքում srcԵկեք ստեղծենք ru.javarush.endpoint փաթեթ, և դրանում կստեղծենք HelloWebServicePublisher դաս՝ հիմնական մեթոդով՝ փաթեթ ru: javarush. վերջնակետ; // դաս՝ վեբ ծառայությունների հետ վեբ սերվերի գործարկման համարներմուծել javax. xml. ws. Վերջնակետ; // մեր վեբ ծառայության դասըներմուծում ru. javarush. ws. HelloWebServiceImpl; հանրային դասի HelloWebServicePublisher ( public static void main (String... args) ( // գործարկել վեբ սերվերը 1986-ի նավահանգստում // և առաջին արգումենտում նշված հասցեին, // գործարկել երկրորդ արգումենտում անցած վեբ ծառայությունըՎերջնակետ. հրապարակել ( «http://localhost:1986/wss/hello», նոր HelloWebServiceImpl () ); ) ) Այժմ եկեք գործարկենք այս դասը՝ սեղմելով Shift + F10. Վահանակում ոչինչ չի հայտնվի, բայց սերվերը աշխատում է: Դուք կարող եք դա հաստատել՝ ձեր դիտարկիչում մուտքագրելով http://localhost:1986/wss/hello?wsdl տողը: Բացվող էջը, մի կողմից, ապացուցում է, որ մենք ունենք վեբ սերվեր (http://), որն աշխատում է մեր համակարգչի վրա (localhost) 1986-ի պորտով, իսկ մյուս կողմից՝ ցույց է տալիս մեր վեբ ծառայության WSDL նկարագրությունը։ Եթե ​​դադարեցնեք հավելվածը, նկարագրությունը անհասանելի կդառնա, ինչպես նաև վեբ ծառայությունը, այնպես որ մենք դա չենք անի, այլ կանցնենք հաճախորդին գրելուն:

Հաճախորդ

Ծրագրի թղթապանակում srcԵկեք ստեղծենք փաթեթ ru.javarush.client , և դրա մեջ HelloWebServiceClient դասը հիմնական մեթոդով՝ փաթեթ ru: javarush. հաճախորդ; // անհրաժեշտ է wsdl նկարագրությունը ստանալու համար և դրա միջոցով // հասնել վեբ ծառայության ինքնիններմուծել java. ցանց. URL; // այս բացառությունը տեղի կունենա URL օբյեկտի հետ աշխատելիսներմուծել java. ցանց. MalformedURLEբացառություն; // դասեր xml-ը վերլուծելու համար wsdl նկարագրությամբ // և հասնել ծառայության պիտակի դրանումներմուծել javax. xml. անվանատարածք. QName; ներմուծել javax. xml. ws. Ծառայություն; // մեր վեբ ծառայության ինտերֆեյսը (մեզ ավելին է պետք)ներմուծում ru. javarush. ws. HelloWebService; հանրային դաս HelloWebServiceClient ( հանրային ստատիկ դատարկ հիմնական (String args) նետում է MalformedURLException ( // ստեղծել wsdl նկարագրության հղում URL url = նոր URL ( «http://localhost:1986/wss/hello?wsdl») ; // Մենք նայում ենք հաջորդ կոնստրուկտորի պարամետրերին WSDL նկարագրության հենց առաջին թեգում - սահմանումներ // դիտեք 1-ին արգումենտը targetNamespace հատկանիշում // նայեք 2-րդ արգումենտին name հատկանիշում QName qname = նոր QName ("http://ws.site/" , "HelloWebServiceImplService" ); // Այժմ մենք կարող ենք հասնել ծառայության պիտակին wsdl նկարագրության մեջ,Ծառայության ծառայություն = Ծառայություն. ստեղծել (url, qname) ; // և այնուհետև մինչև դրա մեջ տեղադրված պորտի պիտակը, այնպես որ // ստանալ հղում դեպի վեբ ծառայության օբյեկտ, որը հեռու է մեզանից HelloWebService բարև = ծառայություն: getPort (HelloWebService.class); // Ուռա՜ Այժմ կարող եք զանգահարել հեռակառավարման մեթոդՀամակարգ. դուրս. println (բարև. getHelloString («JavaRush») ); ) ) Ես առավելագույն մեկնաբանություններ տվեցի ցուցակման կոդի վերաբերյալ։ Ես ավելացնելու ոչինչ չունեմ, ուստի եկեք գործարկենք (Shift+F10): Մենք պետք է տեսնենք տեքստը վահանակում. Բարև, JavaRush: Եթե ​​դուք չեք տեսել այն, ապա հավանաբար մոռացել եք գործարկել վեբ ծառայությունը:

Եզրակացություն

Այս թեմայում ներկայացվեց կարճ էքսկուրսիադեպի վեբ ծառայություններ: Եվս մեկ անգամ կասեմ, որ իմ գրածներից շատերը իմ ենթադրությունն են այն մասին, թե ինչպես է այն աշխատում, և, հետևաբար, պետք չէ ինձ շատ վստահել: Շնորհակալ կլինեմ, եթե բանիմաց մարդիկ ինձ ուղղեն, քանի որ այդ դեպքում ես ինչ-որ բան կսովորեմ։ UPD.

Այս հոդվածում ես ձեզ կասեմ արտաքին հավելվածներից Terrasoft վեբ ծառայությունների հետ աշխատելու սկզբունքները: Օգտագործելով այս մեխանիզմները, դուք կարող եք իրականացնել ինտեգրման տարբեր առաջադրանքներ ցանկացած արտաքին համակարգի հետ:

Երրորդ կողմի հավելվածներից վեբ ծառայությունների հետ աշխատելու երկու եղանակ կա, ամեն ինչ կախված է օգտագործման նպատակից և ծրագրավորման հատուկ լեզվից.
1. Terrasoft COM օբյեկտների միջոցով աշխատելը
2. Ուղիղ աշխատել վեբ ծառայությունների հետ

Աշխատեք COM օբյեկտների միջոցով

Առաջին տարբերակը ամենաքիչ աշխատատար է և ավելի հարմար, սակայն պահանջում է, որ Terrasoft գրադարանները գրանցվեն հաճախորդի մեքենայում (COM օբյեկտներ օգտագործելու համար): Այս դեպքում վեբ ծառայությունների հետ ամբողջ աշխատանքը կիրականացվի Terrasoft COM օբյեկտների կողմից՝ ապահովելով տվյալների և օբյեկտների հասանելիություն Terrasoft հարթակի օբյեկտային մոդելի միջոցով՝ IDataset, ISelectQuery և այլն:

Ծրագրային կերպով միանալու համար հարկավոր է գործարկել հետևյալ կոդը (օրինակ Jscript-ում, բայց դա կարող է իրականացվել ցանկացած լեզվով, որն աշխատում է COM օբյեկտների հետ).

// Ստեղծեք միակցիչ և կոնֆիգուրացիա COM օբյեկտների օրինակներ
WSConnector = նոր ActiveXObject( «TSDskObjectLibrary.DskConnector») ; // 3.4.0+ տարբերակների համար օբյեկտը ստեղծվում է ActiveXObject("TSObjectLibrary.Connector")
var WSCconfiguration = նոր ActiveXObject( «TSObjectLibrary.Configuration») ;
WSConfiguration.DBExecutorTypeCode = "WebServices" ;

// Ստեղծված կապի քեշավորում
Connector.Attributes("WSConnector") = WSCconnector;

// Սահմանել կապի տողը և սերվերի վրա կազմաձևված կազմաձևի անվանումը
WSConfiguration.SetConnectionString(
""URL=http://192.168.227.128/TSWebServicesServerLibrary.dll/soap/IServer"" +
","ConfigurationName=Dev332"" );

// Բացել կոնֆիգուրացիան
var IsConnected = WSConnector.OpenConfiguration (
WSC կոնֆիգուրացիա
1 , // Նույնականացման տեսակը՝ 0 - Windows Authentication, 1 - Server
«ddd» // Օգտագործողի անունը
""); // Գաղտնաբառ

Հաջող կապից հետո մենք կարող ենք մուտք գործել ցանկացած օբյեկտ, ստանալ տվյալներ և այլն: Օրինակ՝ կոնտրագենտների մասին տվյալներ ստանալը.

// ds_Account ծառայության ստացում վեբ ծառայությունների միակցիչից
var AccountDataset = WSConnector.Services .GetSingleItemByUSI ("ds_Account");

// Տվյալների հավաքածուի պատրաստում. ֆիլտրերի փակում և մաքրում
AccountDataset.Close();
EnableDatasetFilters (AccountDataset, false);

// Զտել ընթացիկ գրառման ID-ով
ApplyDatasetFilter(AccountDataset, «ID» , dlData.Dataset («ID») , true);

// Տվյալների հավաքածուի բացում
AccountDataset.Open();

// Կարդացեք տվյալները
եթե (AccountDataset.IsEOF) (
var Value = "(տվյալներ չկան)" ; !}
edtWSName.Value = Արժեք;
edtWSOfficialName.Value = Արժեք;
edtWSCode.Value = Արժեք;
) ուրիշ (
edtWSName.Value = AccountDataset.ValAsStr («Անուն»);
edtWSOfficialName.Value = AccountDataset.ValAsStr ("OfficialAccountName");
edtWSCode.Value = AccountDataset.ValAsStr («Կոդ»);
}

// Տվյալների հավաքածուի փակում
AccountDataset.Close();

Կցված է Jscript-ում վեբ ծառայությունների հետ աշխատելու ամբողջական օրինակ՝ օգտագործելով COM օբյեկտները:

Անմիջականորեն աշխատել վեբ ծառայությունների հետ

Այս տեսակի աշխատանքն ավելի դժվար է, քանի որ... Վեբ ծառայություններին ուղղված բոլոր հարցումները պետք է ուղարկվեն ինքնուրույն, և դուք պետք է նաև ինքներդ մշակեք սերվերի պատասխանը: Սա չի օգտագործում Terrasoft COM օբյեկտներ, հետևաբար կարիք չկա տեղադրել և գրանցել Terrasoft գրադարանները յուրաքանչյուր հաճախորդի համակարգչի վրա, որտեղից կպահանջվեն վեբ ծառայություններ:

Վեբ ծառայություններին հարցումները կարող են ուղարկվել դրանց ինտերֆեյսի (WSDL) հիման վրա՝ պարամետրերով բոլոր մեթոդների նկարագրությունը:

Վեբ ծառայությունների հետ աշխատելու ծրագրերի մշակումը պարզեցնելու համար որոշ IDE-ներ, օրինակ՝ Visual Studio-ն, ապահովում են WSDL-ի ներմուծում (Add WebService Reference), մինչդեռ IDE-ն ինքն է ստեղծում վեբ ծառայությունների հետ աշխատելու փաթաթման դասեր: Նման դասի մեթոդներ կանչելով՝ դուք պարզապես կկանչեք վեբ ծառայության համապատասխան մեթոդները։

Պարզեցումը կայանում է նրանում, որ վեբ ծառայության մեթոդ կանչելու համար անհրաժեշտ է ուղարկել ամբողջական XML հարցում, իսկ wrapper դասերի օգնությամբ պարզապես զանգահարել համապատասխան մեթոդը պարամետրերով:

Օրինակ C#-ում.

// Ստեղծեք վեբ ծառայության հաճախորդ
ws. ISserver sc = նոր ws. ServerClient (); // ws.IServer – փաթաթման դաս Terrasoft վեբ ծառայությունների հետ աշխատելու համար
ws. OpenConfigurationRequest rqOpenConfiguration = նոր ws: OpenConfigurationRequest(); // Խնդրում է բացել կոնֆիգուրացիան
ws. OpenConfigurationResponse rsOpenConfiguration = նոր ws: OpenConfigurationResponse();

// Բացել կոնֆիգուրացիան
rqOpenConfiguration. ACompressionLevel = 0; //Առանց սեղմման (zip)
rqOpenConfiguration. AConfigurationName = Կազմաձևում;
rqOpenConfiguration. ADExecutorTypeCode = "MSSQL" ;
rqOpenConfiguration. AUserName = Username;
rqOpenConfiguration. AUserPassword = Գաղտնաբառ;
rsOpenConfiguration = sc. OpenConfiguration (rqOpenConfiguration);

Միևնույն ժամանակ տվյալների փոխանցում, մեծ տվյալների փաթեթների բաժանում, սերվերի պատասխանի վերլուծություն և այլն: դուք պետք է դա իրականացնեք ինքներդ:

Կցվում է C#-ով վեբ ծառայությունների հետ աշխատելու ամբողջական օրինակ:

Հատուկ շնորհակալություն Ալեքսանդր Կրավչուկին ներկայացված օրինակների համար։

Բարեբախտաբար, վեբ ծառայությունների հետ աշխատելու սահմանափակումներ չկան:

Մետատվյալներին վեբ ծառայության ավելացում

Բացեք կազմաձևման ծառը, ճյուղը Ընդհանուր են, Հետագա Վեբ ծառայություններ, ավելացրեք նոր վեբ ծառայություն (ես այն կանվանեմ my_ws) և լրացրեք հատկությունները, ինչպես ցույց է տրված նկարում։

Վեբ ծառայությունների հատկությունների վերաբերյալ մի քանի պարզաբանումներ պետք է արվեն։

  • XDTO փաթեթներ- Այս դաշտը նշում է XDTO փաթեթների ցանկը, որոնց տեսակները կարող են օգտագործվել այն արժեքով, որը վերադարձվում է վեբ ծառայության գործողությունների արդյունքում:
  • Անվանատարածքի URIտող է, որը սահմանում է այս վեբ ծառայության անվանատարածքի URI: Ցանկացած վեբ ծառայություն կարող է եզակիորեն նույնականացվել իր անվան և անվանատարածքի համադրությամբ: Պետք է հստակ հասկանալ, որ այս հատկությունը կապ չունի վեբ սերվերի ֆիզիկական հասցեի կամ կազմակերպության կայքի և այլնի հետ: Դա պարզապես վիրտուալ հասցե է: Հետևաբար, դուք պետք է հստակ անուն նշանակեք, որը կարող է պատմել, օրինակ, վեբ ծառայության գտնվելու վայրի և կիրառման տարածքի մասին: Մասնավորապես, կարող է լինել ստանդարտ կոնֆիգուրացիայի հապավումը, որին պատկանում է վեբ ծառայությունը:

Վեբ ծառայության գործառնություններ

Վեբ ծառայության գործունեությունը ապահովելու համար անհրաժեշտ է դրա համար ստեղծել գործողություններ, որոնք կկատարեն որոշակի գործողություններ և անհրաժեշտության դեպքում կվերադարձնեն անհրաժեշտ տվյալները:

Որպես օրինակ՝ եկեք ստեղծենք գործողություն մեր վեբ ծառայության համար, որը կվերադարձնի «Բարև աշխարհ» դասական արտահայտությունը: Եկեք զանգենք նրան Բարեւ:

Եկեք վեբ ծառայության մոդուլում ստեղծենք ֆունկցիա Բարեւ աշխարհ(), որի հղումը կտեղադրվի գործողության համապատասխան հատկության մեջ։

HelloWorld() ֆունկցիան վերադարձնել «Բարև աշխարհ»: ; EndFunction

Բայց այս գործողությունը մեկ թերություն ունի. Դուք չեք կարող բնօրինակ տվյալները փոխանցել դրան: Այս նպատակների համար վեբ ծառայությունների գործառնություններն օգտագործում են իրենց ենթակա օբյեկտները. Ընտրանքներ.

Ավելացնենք ևս մեկ գործողություն. Բարև Ձեզ, և դրա համար ստեղծեք պարամետր Անուն.

Այս գործողությունը ողջույն կվերադարձնի օգտագործողին՝ զանգահարելով հետևյալ գործառույթը.

Գործառույթը HelloUser(UserName) Վերադարձեք «Բարև, « + Օգտվողի անուն + «»: ; EndFunction

Վեբ ծառայության հրապարակում

Այժմ մենք պատրաստ ենք հրապարակել վեբ ծառայությունը։ Դա անելու համար դուք պետք է մուտք գործեք կոնֆիգուրատոր՝ ադմինիստրատորի իրավունքներով: Կտտացրեք 1C դյուրանցմանը սեղմեք աջև ընտրեք ցանկի համապատասխան տարրը՝

Ընտրեք ցանկից Վարչություն —> Հրապարակում վեբ սերվերում

Բացվող պատուհանում մուտքագրեք հրապարակման անունը և նշեք վանդակը Հրապարակեք վեբ ծառայություններև նաև նշեք մեր ստեղծած վեբ ծառայությունը.

WS հղումներ

Վեբ ծառայությունների հետ աշխատելու համար օգտագործվում է հետևյալ 1C օբյեկտը. WS-հղում. Դա վեբ ծառայության WSDL նկարագրությունն է, որը ստացվում է ներմուծման միջոցով այն աղբյուրից, որի վրա գտնվում է վեբ ծառայությունը: Այսինքն, առաջին հերթին մենք պետք է իմանանք այն հասցեն, որտեղից կարող ենք ստանալ վեբ ծառայության WSDL նկարագրությունը։ Մեր օրինակի հետ կապված, վեբ ծառայության ստեղծման և հրապարակման ընթացքում մեր կողմից կատարված կարգավորումների համաձայն, այս հասցեն կունենա հետևյալ տեսքը.

Http://localhost/professia1c/ws/my_ws.1cws?wsdl

Տեսնենք, թե ինչ մասերից է բաղկացած այս հասցեն։

  • http://localhost/- Այս հասցեն ցույց է տալիս վեբ սերվերի ֆիզիկական գտնվելու վայրը: Քանի որ ես այն ունեմ տեղական մեքենայի վրա, դա localhost է, բայց գործնականում սա կամ սերվերի IP հասցեն է կամ նրա անունը
  • մասնագիտություն1cհրապարակման անվանումն է։ Մենք այն մտցրինք դաշտ Անուներկխոսության մեջ, երբ վեբ ծառայությունը հրապարակվեց
  • ws- նշան, որ մենք մուտք ենք գործում վեբ ծառայություն
  • my_ws.1cws— հրապարակման ֆայլի անվանումը, որը մենք նշել ենք վեբ ծառայությունը ստեղծելիս հատկություններում
  • wsdl- պարամետր, որը ցույց է տալիս, որ մենք պետք է ստանանք WSDL նկարագրություն

Վեբ ծառայության հրապարակումից հետո, որպեսզի համոզվեք, որ այն հաջողությամբ հրապարակվել է, կարող եք մուտքագրել դրա WSDL նկարագրության հասցեն ձեր բրաուզերի հասցեագոտում: Այս դեպքում մենք պետք է ստանանք XML ֆայլ բրաուզերի պատուհանում մոտավորապես հետևյալ բովանդակությամբ.

  1. Օգտագործելով դինամիկ ws հղում:
  2. Ստատիկ ws հղումի ստեղծում:

Եկեք նայենք այս մեթոդներից յուրաքանչյուրին:

Դինամիկ WS հղումներ

&OnServer կարգը ConnectOnServer() WSOdefinition = New WSD Definition( «http://localhost/professia1c/ws/my_ws.1cws?wsdl», «Սիդորով», «» ); WSProxy = Նոր WSProxy(WSOdefinition, «http://www.site/», «my_ws», «my_wsSoap»); VSPProxy. Օգտագործող = «Սիդորով» ; VSPProxy. Գաղտնաբառ = "" ; TextVS = VSPProxy: HelloUsr («Վասյա»); Հաղորդագրություն = New MessageToUser; Հաղորդագրություն. Տեքստ = TextVS; Հաղորդագրություն. Զեկուցել() ; Ընթացակարգի ավարտը

Ինչպես կարող եք կռահել, այս ընթացակարգի արդյունքը կլինի «Բարև, Վասյա» հաղորդագրության պատուհանի տեքստը:

Ստատիկ WS հղումներ

Ծրագրային կերպով օբյեկտ ստեղծելու փոխարեն WS սահմանումներմենք կարող ենք ուղղակիորեն ստեղծել WS-link մետատվյալների օբյեկտ կոնֆիգուրացիայի ծառում: Ստեղծման գործընթացում կցուցադրվի պատուհան՝ խնդրելով նշել WSDL սահմանման հասցեն՝ այն ներմուծելու համար.

Այնուհետև մենք կարող ենք ուղղակիորեն անդրադառնալ այս WS հղումին կոդով: Իսկ վեբ ծառայություն մուտք գործելու կարգը կունենա հետևյալ ձևը.

&OnServer կարգը ConnectThroughLinkOnServer() VSPProxy = WSLinks: WSlink_my_ws. CreateWSProxy("http://www.site/", "my_ws", "my_wsSoap"); VSPProxy. Օգտագործող = «Սիդորով» ; VSPProxy. Գաղտնաբառ = "" ; TextVS = VSPProxy: HelloUsr («Վասյա»); Հաղորդագրություն = New MessageToUser; Հաղորդագրություն. Տեքստ = TextVS; Հաղորդագրություն. Զեկուցել() ; Ընթացակարգի ավարտը
 
Հոդվածներ Ըստթեմա:
Որոնողական համակարգերի զարգացման պատմություն
Բարեւ բոլորին! Այսօր հոդված է լինելու աշխարհում որոնողական համակարգերի մասին, որոնք հիմնականում գոյություն ունեն, երբ են հայտնվել, կոնկրետ ինչ կանոններ են գործում Ռուսաստանում և ինչ կա ամբողջ աշխարհում: Հոդվածը հսկայական է, այնպես որ նստեք հարմարավետ, ցանկալի է դրանք նախապես պատրաստել
Համակարգչի RAM-ը մեծացնելու ուղիներ
Ինչպես կարող եմ իմանալ, արդյոք կարող եմ ավելացնել իմ համակարգչի հիշողությունը: Գալիս է մի պահ, երբ սկսում եք հասկանալ, որ ձեր համակարգիչը այլևս չի կարող հաղթահարել իր առաջադրանքները, բայց դա չի նշանակում, որ դուք պետք է նորը գնեք, հատկապես, եթե ձեր պրոցեսորն ընդամենը երկու կամ երեք տարեկան է: Բոլորը
Ինչու՞ է պրիպյատի հետախույզը ռենտգենից դուրս թռչում
Microsoft-ի արտադրանքի մեծ թվով օգտատերեր հայտնում են, որ կորցրել են Windows 10-ի ակտիվացումը և Pro տարբերակը վերածել Home: Օգտատերերը ստանում են ծանուցում ժամկետանց բանալի մասին, և երբ փորձում են նորից ակտիվացնել, ստանում են սխալ 0x803fa067 Windo-ի համար:
css տարրի տեսակի ընտրիչ
Ի՞նչ է ընտրիչը css-ում Դա տարրի կամ էլեմենտների խմբի նկարագրությունն է, որը բրաուզերին ցույց է տալիս, թե որ տարրը պետք է ընտրել՝ դրա վրա ոճ կիրառելու համար: Եկեք նայենք հիմնական CSS ընտրիչներին։1) .X .topic-title (ֆոնի գույնը՝ դեղին; ) CSS se