کار با خدمات وب 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 از نوع مربوطه با استفاده از Factory سرویس مربوطه تبدیل شوند. . شما می توانید در مورد این در انجمن ما یا در کتاب "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 شنیده اید؟ دیر یا زود، هر فردی با این فناوری روبرو می شود (مخصوصاً اگر شما نیاز به انتقال سریع برخی از دایرکتوری "کارمندان" داشته باشید، و بخش پرسنل با پیش بینی نیاز به رانندگی مجدد در همه 1500 کارمند، آماده است تا شما را در اولین بار آویزان کند. ناخن مناسب).
بله، و بنابراین، در قلب فناوری COM ایده وجود دارد ممکن هافراخوانی کد برنامه (و دسترسی به داده ها) یک برنامه از برنامه دیگر. علاوه بر این، ممکن هااین کار را نه در سطح رویه ها و عملکردهای فردی، بلکه با در اختیار گرفتن انجام دهید اشیاءیک برنامه دیگر هنگام استفاده از OLE، یک شی در برنامه خود ایجاد می کنیم که " نماینده"یا اگر ترجیح می دهید" لفاف" برخی از شیء برنامه که می خواهیم با آن تعامل برقرار کنیم (به اصطلاح "OLE-object" یا "COM-object"). از طریق این شی "wrapper"، ویژگی ها و روش های شی یک برنامه دیگر در دسترس قرار می گیرد. به ما، و تنها کسانی که توسعه دهنده رفتنبرنامه ها با انتشار آنها در توضیحات به ما اجازه استفاده از آنها را دادند رابط. (خب، من نمی خواستم وارد جنگل شوم، اما به روش دیگری کار نمی کند ...)
حالا بیایید آن را تصور کنیم همانبرنامه روی رایانه دیگری قرار دارد و حتی در شبکه محلی نیست (DCOM، CORBA و سایر اختصارات با چنین مواردی کار خوبی انجام می دهند)، اما در جایی دور و دور در اینترنت. اینجاست که سرویس‌های وب روی صحنه می‌آیند (همچنین با اختصارات: SOAP، WSDL، و غیره کامل می‌شوند)، که به شما امکان می‌دهد در این مورد «ترفند» مشابهی را انجام دهید: i.e. دریافت داده ها و دستکاری اشیاء یک برنامه کاربردی در حال اجرا بر روی یک کامپیوتر در طرف دیگر اینترنت.
زیر " خارجی"با یک وب سرویس، من خدمات وب ارائه شده توسط برخی را درک می کنم تامین کنندهسرویس (یعنی برنامه ما نیست.) بر این اساس، تحت "داخلی" - یک سرویس وب است که ما ارائه خواهیم کرد از جانبیا دقیق تر، مستقربرنامه ما هنگام استفاده از سرویس های وب خارجی، باید بدانید که اگرچه شیء "wrapper" در برنامه "محلی" ما ایجاد می شود، "کد اجرای" این شی، شاید در آن سوی کره زمین باشد. با این حال، تبادل بین ماو آنهادر XML که اکنون در همه جا حاضر است، با «مضافات» معروف (جهان‌شمول و ساختار) و «منفی‌ها» (نفخ) اتفاق می‌افتد، و http قدیمی خوب به عنوان «خط انتقال» استفاده می‌شود.
آه، و ترافیک اینترنت را فراموش نکنید! علاوه بر این، در مورد خدمات وب خارجی، بیشتر آن باید انجام شود ورودیجزء.
همه چیز دیگر در Yandex است. بریم جلوتر...

پاها از کجاست، یعنی بال ها رشد می کنند

با جستجو در همان Yandex ، یک سرویس وب فوق العاده از شرکت Aeroflot پیدا کردم که به شما امکان می دهد اطلاعات لحظه ای در مورد ورود و خروج هواپیما دریافت کنید و تصمیم گرفتم نوعی "نمایش فرودگاه" را در "1C" ایجاد کنم: شرکت، پروژه". خود سرویس در اینجا زندگی می کند: http://webservices.aeroflot.ru/desc_flightinfo.asp

گفت: بریم!

برای شروع، من یک پیکربندی خالی "1C:Enterprise 8.1" ایجاد کردم (در زمان نوشتن این مقاله، نسخه پلتفرم 8.1.5.123 را در اختیار داشتم). سپس یک شی جدید از نوع مرجع WS را به پیکربندی خود اضافه کردم. به درخواست پیشنهادی برای وارد کردن URL WSDL وارد شده، من پیوندی به فایل WSDL وارد کردم که در صفحه خدمات ذکر شده است: http://webservices.aeroflot.aero/flightstatus.wsdl (فایل WSDL شرحی است از برای جزئیات بیشتر، Yandex را ببینید) و با افتخار نام شی ایجاد شده را "Aeroflot" گذاشت. با دوبار کلیک کردن روی این شی، درختی با ساختار وب سرویس دریافت کردم.

این درخت یک "پرتره" از وب سرویس است که 1Ska آن را می بیند. جالب ترین در شعبه "وب خدمات" است: این نام هاو پورت هاوب سرویس ها (در واقع، یک فایل WSDL می تواند نه یک، بلکه چندین سرویس وب را توصیف کند، سپس یک شاخه جداگانه برای هر وب سرویس ایجاد می شود) و لیست شده است. مواد و روش هاسرویس وب. اینها همان "رشته ها" هستند که با کشیدن آنها می توانید دسترسی به داده های ارائه شده توسط وب سرویس را کمی باز کنید. شاخه "Data Model" شامل شرحی از کتابخانه های نوع داده ای است که توسط وب سرویس استفاده می شود.
اطلاعات مختصری در مورد استفاده از وب سرویس معمولاً در همان مکان پیوند به فایل WSDL یافت می شود. در مورد Aeroflot، این صفحه http://webservices.aeroflot.aero/flightstatus.asmx است.

"برخاستن، سپس فرود..."

برای کار با وب سرویس، پردازش "Scoreboard" را به پیکربندی اضافه کردم، و در آن - یک فرم، که به عنوان اصلی تعیین کردم. در فرم فیلد انتخاب "SelectAirport"، فیلد ورودی "DateFlight"، پانل "Scoreboard" با دو صفحه "Arrival" و "Departure" را قرار دادم، در حالی که علامت "Distribute by pages" را در ویژگی های پانل برداشتم. و فیلد جدول "TableScoreboard".
تعامل با وب سرویس بر اساس اصل "درخواست پاسخ" رخ می دهد، در حالی که یک شی واسطه ویژه برای وب سرویس ایجاد می شود. به همین دلیل است که من یک ویژگی از فرم "Aeroflot Service" از نوع دلخواه را اضافه کردم.
اگر توضیحات سرویس را به دقت مطالعه کنید، می بینید که وب سرویس داده های ورود و خروج را به ترتیب از طریق تماس با روش های ورود و خروج ارائه می دهد. در این حالت هر دو روش کد فرودگاه و تاریخ مورد نظر را به عنوان پارامتر می گیرند. علاوه بر این، وب سرویس فرصتی را برای دریافت لیستی از فرودگاه هایی که داده های مربوط به آنها در سیستم موجود است، فراهم می کند. سناریوی زیر از تعامل با یک وب سرویس کاملاً واضح است:
1. دریافت لیستی از فرودگاه ها.
2. فرودگاه و تاریخ مورد نظر را انتخاب کنید.
3. دریافت اطلاعات در مورد ورود یا خروج.
اما قبل از دسترسی به وب سرویس، باید شیء پراکسی (از نوع WSProxy) را مقداردهی اولیه کنید، که من در فرم باز کنترل کننده انجام دادم:
Aeroflot Service=WSLinks.Aeroflot.CreateWSProxy(" http: //www.aeroflot.ru/، "FlightStatus"، "FlightStatusSoap")؛
اولین پارامتر URI فضای نام سرویس وب است. می توانید با باز کردن ویژگی های وب سرویس در درخت پیوند WS متوجه آن شوید. پارامتر دوم و سوم به ترتیب نام و پورت وب سرویس است.
(مفاهیم "نام"، "پورت"، "پراکسی" و غیره را که در سرویس های وب اعمال می شود با مفاهیم آشناتر پروتکل TCP/IP اشتباه نگیرید. اگر مطابقت بین آنها وجود داشته باشد، نسبتاً معنایی است. در حالت کلی، باید بدانید که، برای مثال، یک پورت وب سرویس و یک پورت TCP چیزهای کاملاً متفاوتی هستند).
بنابراین، من شیء Aeroflot Service از نوع WSPProxy را مقداردهی کردم، که اساساً یک "پوشش" از وب سرویس است. از طریق آن می توانم به روش های وب سرویس به عنوان روش های "بومی" پلت فرم دسترسی داشته باشم.
اول از همه، من یک لیست از فرودگاه ها را دریافت کردم و لیست فیلد انتخاب "SelectAirport" را پر کردم:

ChoiceList=FormItems.AirportChoice.ChoiceList; ChoiceList.Clear(); AirportList=ServiceAeroflot.AirportList().GetList("list"); TotalAirports=ListAirports.Number(); برای ii=0 توسط TotalAirports-1 Loop Airport=ListAirports.Get(s); ChoiceList.Add(Airport.code, ""+Airport.city+" : "+Airport.name); چرخه پایان
در اینجا ما به یک نظر کوچک در مورد designAirportList=ServiceAeroflot.AirportList().GetList("list");
نکته این است که مقادیر بازگردانده شده توسط روش های خدمات وب در پلت فرم توسط اشیایی از نوع ObjectXDTO نشان داده می شود. از آنجایی که مبحث فناوری XDTO از حوصله این مقاله خارج است، فقط برای آن می گویم دگرگونیاین شی را در یک لیست (که هست)، من متد GetList() آن را فراخوانی کردم. بقیه کد کاملاً توضیحی است، از جمله نام فیلدهای ساختار فرودگاه که در صفحه توضیحات وب سرویس یافتم.
اکنون می توانید پیکربندی را اجرا کنید و مطمئن شوید که لیست فیلد انتخابی با نام فرودگاه ها پر شده است:

«روز عزیمت، روز ورود...»

اکنون تقریباً همه چیز برای عملکرد تابلوی امتیازی ام آماده است. فقط "رنگش کنم و دور بریزم" باقی می ماند :) چه کنم:

روش پر کردن Tableau(Arrival=True) Table Tableau.Columns.Clear(); TableScoreboard.Columns.Add("FlightCode"، "FlightCode"); TableScoreboard.Columns.Add(" شرکت هواپیمایی کد"، "Airline"); TableScoreboard.Columns.Add("FlightNumber"، "Number"); TableScoreboard.Columns.Add(" ترانزیت فرودگاهی", "ترانزیت فرودگاهی")؛ TableScoreboard.Columns.Add("Airport"، "Airport"+?(Arrival,"Departure","Arrival")); TableScoreboard.Columns.Add(" جدول زمانی"، "Scheduled"); TableScoreboard.Columns.Add(" زمان برنامه ریزی شده"، "Planned"); TableScoreboard.Columns.Add(" زمان واقعی"، "واقعی")؛ TableScoreboard.Columns.Add("زمان محاسبه شده"، "محاسبه")؛ TableScoreboard.Columns.Add("زمان فرود"، ?(ورود، فرود،"برخاست"))؛ TableScoreboard. ستون‌ها اضافه کنید("CombinedFlight"، "پرواز ترکیبی")؛ TableScoreboard.Columns.Add("Status"، "Status")؛ اگر نرسیدیم، سپس TableScoreboard.Columns.Add("ثبت‌نام"، "ثبت‌نام")؛ TableScoreboard. Columns .Add("Landing", "Landing"); EndIf; FormElements.TableScoreboard.CreateColumns(); FormElements.TableScoreboard.Columns.FlightCode.Visibility=False؛ If Not Arrival ThenFormElements.TableScoreboard.Columns.TableScoreboard.Calibility=Cal. ؛ EndIf؛ If Arrival Then Data=ServiceAeroflot.Arrival(SelectAirport, DateFlight).GetList("list")؛ Else Data=ServiceAeroflot.Departure(SelectAirport,DateFlight).GetList("list")؛ EndIf; TotalRecords=Data.Num ( ) برای ii=0 توسط TotalRecords-1 Loop Record=Data.Get(ies)؛ NewRow=TableTable.Add()؛ NewRow.AirlineCode=Record.company. NewString.FlightNumber=Record.flight_no; NewString.AirportTransit=Record.airport_inter; NewRow.Airport=Record.airport; NewString.TimeSchedule=Record.sched; NewLine.TimePlanned=Record.plan; NewString.TimeActual=Record.fact; NewLine.CalculatedTime=Record.calc; NewString.DropDownTime=Record.real; NewRow.UnionFlight=Record.union_flight_no; NewRow.Status=Record.status; اگر نرسید، NewString.Registration=Record.is_check; NewRow.Landing=Record.is_board; EndIf چرخه پایان پایان رویه

برای بررسی نحوه عملکرد همه اینها، یک دکمه "Update" با تصویر مربوطه را به نوار فرمان فرم اضافه کردم و موارد زیر را در کنترلر آن نوشتم:

Procedure CommandPanel1 Refresh(Button) Fill inScoreboard(FormElements.PanelScoreboard.CurrentPage=FormElements.PanelScoreboard.Pages.Arrival); پایان رویه
ذخیره، اجرا، انتخاب، کلیک، دریافت:

پس گفتار

شگفت انگیز است، اما پس از نوشتن و انتشار مقاله، معلوم شد که ZAV محترم قبلاً نمونه مشابهی را در IT-Land منتشر کرده است "e: http://itland.ru/biblio/detail.php?ID=1060
برای جلوگیری از اتهامات احتمالی سرقت ادبی، اکیداً توصیه می کنم این مقاله را نیز مطالعه کرده و رویکردهای نویسندگان را با هم مقایسه کنید.

چاپ (Ctrl+P)

مکانیسم خدمات وب در 1C: Enterprise وسیله ای برای پشتیبانی از معماری سرویس گرا (SOA) است.
معماری سرویس گرا یک معماری کاربردی است که در آن همه توابع به عنوان سرویس های مستقل با رابط های قابل فراخوانی تعریف می شوند. دسترسی به این خدمات در یک توالی مشخص به شما امکان می دهد یک فرآیند تجاری خاص را پیاده سازی کنید.
معماری سرویس گرا رویکرد جدیدی را برای ایجاد سیستم های اطلاعاتی توزیع شده ارائه می دهد که در آن منابع نرم افزاری به عنوان خدمات ارائه شده از طریق شبکه در نظر گرفته می شوند. این رویکرد به شما امکان می دهد تا به سرعت اجزای (خدمات) توزیع شده را در یک راه حل واحد برای پشتیبانی از فرآیندهای تجاری خاص ادغام کنید.
مکانیسم خدمات وب امکان استفاده از 1C: Enterprise را به عنوان مجموعه ای از خدمات در سیستم های پیچیده توزیع شده و ناهمگن می دهد و همچنین امکان ادغام آن را با سایر سیستم های صنعتی با استفاده از معماری سرویس گرا فراهم می کند.
پیکربندی سیستم 1C: Enterprise می تواند عملکرد خود را از طریق سرویس های وب صادر کند. تعاریف وب سرویس در درخت پیکربندی تعریف می شوند و با انتشار آنها در وب سرور در دسترس سیستم های اطلاعات دلخواه قرار می گیرند.
علاوه بر این، 1C:Enterprise می تواند هم از طریق پیوندهای استاتیک تعریف شده در درخت پیکربندی و هم از طریق پیوندهای پویا ایجاد شده با استفاده از زبان 1C: Enterprise به خدمات وب شخص ثالث دسترسی داشته باشد. برنج. 1. خدمات وب

در قلب معماری خدمات سیستم 1C: Enterprise 8، مدیر سرویس قرار دارد. مدیر سرویس وظایف زیر را انجام می دهد:
● مدیریت مجموعه ای از اتصالات به پایگاه های اطلاعاتی.
● پشتیبانی از توضیحات WSDL سرویس.
● اجرای پروتکل SOAP، سریال سازی پیام، فراخوانی سرویس مربوطه.
مدیر سرویس در فرآیند میزبان سرویس اجرا می شود، که عملکرد دریافت/انتقال پیام ها از/به مدیر سرویس را انجام می دهد. میزبان سرویس می تواند یک وب سرور IIS یا Apache باشد.
مدیر سرویس شامل مجموعه ای از اتصالات است که از طریق آن تعامل با پایگاه داده های سیستم 1C: Enterprise انجام می شود.
مکانیسم خدمات وب پیاده سازی شده در 1C: Enterprise از استانداردهای زیر پشتیبانی می کند:
● SOAP 1.1،
● SOAP 1.2،
● WSDL 1.1،
● WS-I Basic Profile 1.1،
● HTTP 1.1،
● TLS 1.x (اگر نیازی به ارسال گواهی مشتری به سرور نباشد TLS 1.1 و 1.2 پشتیبانی می‌شوند)، از جمله الگوریتم‌های رمزنگاری،
مربوط به GOST R 34.10-2001، R 34.10-94، R 34.11-94 و 28147-89؛
● MTOM;
● احراز هویت: Basic، NTLM/Negotiate.

برای دسترسی به وب سرویس باید از آدرسی استفاده کنید که به شکل زیر است:

http://host/base/ws/WebServiceName

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

بیایید نگاهی دقیق تر به اجزای آدرس بیندازیم:

http://host/base یک URL معمولی است که برای دسترسی، به عنوان مثال، یک پایگاه اطلاعاتی با استفاده از یک سرویس گیرنده وب استفاده می شود. در صورت وجود جداکننده، تعیین مقادیر جداکننده با استفاده از پارامتر Z خط فرمان راه اندازی برنامه مشتری پشتیبانی نمی شود.

ws نشان می دهد که یک سرویس وب در حال دسترسی است (برخلاف hs که دسترسی به سرویس HTTP را تعریف می کند، اینجا را ببینید).

WebServiceName - نام سرویس وب. در یک ویژگی از شی وب سرویس تنظیم کنید.

آدرس وب سرویس - نام جایگزین برای دسترسی به سرویس وب را توصیف می کند. در ویژگی Publish File Name شیء وب سرویس تنظیم کنید. هنگام انتشار سرویس وب قابل تغییر است.

تماس با نام WebServiceName و آدرس WebServiceAddress یک سرویس وب معادل هستند.

افشای عملکرد از طریق خدمات وب

برای در دسترس قرار دادن عملکرد سیستم 1C: Enterprise برای مصرف کنندگان خارجی خدمات وب، باید موارد زیر را انجام دهید:
● ایجاد تعداد مورد نیاز خدمات وب در پیکربندی،
● خدمات وب را با استفاده از یک ابزار پیکربندی اختصاصی منتشر کنید.
شرح روش انتشار خدمات وب و شرح استفاده از Reverse Proxy برای دسترسی به 1C: Enterprise در فصل 7 "راهنمای مدیر" روی دیسک ITS نوشته شده است.
ایجاد وب سرویس به این صورت است:
● افزودن شیء پیکربندی وب سرویس به درخت ابرداده،
● توصیف عملیاتی که وب سرویس ایجاد شده می تواند انجام دهد،
● توصیف پارامترهای عملیات وب سرویس.
شیء پیکربندی وب سرویس شامل یک ماژول است که رویه هایی را در زبان داخلی ایجاد می کند که هنگام فراخوانی عملیات وب سرویس خاص اجرا می شوند. انواع پارامترهای عملیات وب سرویس با استفاده از انواع XDTO توصیف می شوند و می توانند مقادیر XDTO یا اشیاء XDTO باشند.
تماس با سرویس وب به این صورت است:
● یک اتصال مناسب به پایگاه اطلاعاتی از استخر اتصال انتخاب شده است. در صورت عدم وجود اتصال مورد نیاز، اتصال ایجاد می شود.
● یک جلسه جدید ایجاد می شود و یک رویداد برای جلسه ایجاد شده مطرح می شود SettingSessionParameters(در ماژول جلسه)؛
● روش وب سرویس درخواستی فراخوانی می شود و کنترل کننده فراخوانی می شود SettingSessionParameters()(در ماژول جلسه) هر بار که به یک پارامتر جلسه غیر اولیه دسترسی پیدا می شود.
مشاوره. انجام عملیات با منابع فشرده در یک کنترل کننده رویداد توصیه نمی شود SettingSessionParameters.
رویداد SettingSessionParametersماژول جلسه در حالت ممتاز بر روی سرور فراخوانی می شود. ماژول سرویس فراخوانده شده بر روی اجرا می شود
سرور در حالت عادی
ماژول جلسه برای مقداردهی اولیه پارامترهای جلسه و اجرای مجموعه خاصی از دستورات هنگام فراخوانی هر سرویس وب 1C: Enterprise استفاده می شود.

نمونه پیاده سازی وب سرویس

به عنوان مثال، شما باید یک وب سرویس از سیستم 1C: Enterprise ایجاد کنید، که باید ترکیب بخش جدولی آن را طبق شماره فاکتور ارسال شده برگرداند. مثال مشابهی با استفاده از خدمات HTTP در مقاله دیگری مورد بحث قرار خواهد گرفت.
برای توصیف مقدار بازگشتی، اجازه دهید یک بسته XDTO ایجاد کنیم فاکتور DataExpenseبا فضای نام http://www.MyCompany.ru/shipment،شامل سه نوع شی XDTO است:
● نامگذاری – برای انتقال داده های مورد جستجوی نامگذاری. این نوع شی XDTO دارای ویژگی های زیر خواهد بود:
● نام – نوع رشته از فضای نام
نام و نام خانوادگی– نوع رشته از فضای نام http://www.w3.org/2001/XMLSchema;
● بارکد - نوع رشته از فضای نام http://www.w3.org/2001/XMLSchema;
● PurchasingPrice – int را از فضای نام تایپ کنید http://www.w3.org/2001/XMLSchema.
StringInvoiceInvoice- برای انتقال داده های یک خط فاکتور. این نوع شی XDTO دارای ویژگی های زیر خواهد بود:
● Nomenclature – نام Nomenclature را از فضای نام تایپ کنید. ارجاع به یک شی XDTO است،
که در بالا تعریف کردیم؛
● مقدار - int را از http://www.w3.org/2001/XMLSchema فضای نام تایپ کنید.
● قیمت – int را از http://www.w3.org/2001/XMLSchema فضای نام تایپ کنید.
● Sum یک نوع int از http://www.w3.org/2001/XMLSchema فضای نام است.
فاکتور فروش- برای انتقال داده های تمام خطوط فاکتور. این نوع شی XDTO حاوی یک ویژگی واحد خواهد بود:
● ترکیب - نوع StringInvoiceInvoiceاز فضای نام http://www.MyCompany.ru/shipment. نشان دهنده ارجاع به یک شی XDTO،
که در بالا تعریف کردیم. برای اینکه این ویژگی شامل مجموعه ای نامحدود از مقادیر باشد، باید آن را تنظیم کنید
دارای کران بالا به -1.
پس از ایجاد انواع XDTO لازم، یک وب سرویس جدید باید به پیکربندی اضافه شود فاکتور DataExpenseبا مقادیر دارایی زیر:

URI فضای نام - http://www.MyCompany.ru/shipment;
● بسته های XDTO - فاکتور DataExpense;
نام فایل انتشارات– حمل و نقل.1cws .
وب سرویس تولید شده باید یک عملیات Get با مقادیر ویژگی زیر داشته باشد:
نوع بازگشتفاکتور فروشاز فضای نام http://www.MyCompany.ru/shipment;
مقدار خالی احتمالی- نصب شده است؛
● نام رویه - دریافت کنید.
برای عملیات Get، پارامتر DocumentNumber را با مقادیر ویژگی زیر تعریف کنید:
● نوع مقدار - رشته را از فضای نام تایپ کنید http://www.w3.org/2001/XMLSchema;
جهت انتقال - ورودی.
پس از آن باید ماژول وب سرویس ایجاد شده را باز کنید و تابع Get() را در این ماژول قرار دهید که با فراخوانی این وب سرویس اجرا می شود.

تابع دریافت (شماره سند) صادرات // شی فاکتور را با شماره ارسال شده دریافت کنید DocumentReference = Documents.Invoice. FindByNumber(DocumentNumber, CurrentDate());اگر DocumentReference.Empty()سپس بازگشت تعریف نشده؛ EndIf سند = DocumentReference.GetObject(); // انواع اشیاء XDTO را دریافت کنید نوع نامگذاری= FactoryXDTO.Type ("http://www.MyCompany.ru/shipment"، "Nomenclature"); InvoiceType خروجی = FactoryXDTO.Type("http://www.MyCompany.ru/shipment"، "فاکتور")؛ StringInvoiceInvoiceType = FactoryXDTO.Type("http://www.MyCompany.ru/shipment"، "خط فاکتور")؛ // یک شیء XDTO فاکتور ایجاد کنید فاکتور خروجی = FactoryXDTO.Create(نوع فاکتور محموله)؛ برای هر LineDocument از Document.Composition Loop // اشیاء XDTO خط فاکتور را ایجاد کنید // و نامگذاری StringInvoiceInvoice = FactoryXDTO.Create(StringInvoiceType); نامگذاری = FactoryXDTO.Create(نومنکلاتوری)؛ // مشخصات مورد را پر کنید Nomenclature.Name = Docstring.Nomenclature.Name; Nomenclature.FullName = DocumentString.Nomenclature.FullName; Nomenclature.BarCode = DocumentString.Nomenclature.BarCode; Nomenclature.PurchasePrice = Docstring.Nomenclature.PurchasePrice; // ویژگی های خط فاکتور را پر کنیدهفتم خط فاکتور نامگذاری = نامگذاری; Line.Quantity فاکتور = Document Line.Quantity; فاکتور Line.Price = Document Line.Price; خط فاکتور هزینه. مبلغ = خط سند. مبلغ; // یک خط فاکتور اضافه کنید فاکتور.ترکیب.افزودن(خط فاکتور)؛ چرخه پایان // فاکتور را برگردانیدبرگشت فاکتور فروش; EndFunctions

کار با خدمات وب شخص ثالث

1C: Enterprise می تواند از خدمات وب ارائه شده توسط سایر ارائه دهندگان به چندین روش استفاده کند:
● استفاده از پیوندهای استاتیک ایجاد شده در درخت پیکربندی.
● با استفاده از پیوندهای پویا ایجاد شده با استفاده از زبان داخلی.
● ترکیبی از روش های قبلی.
مزیت استفاده از لینک های استاتیک سرعت بیشتر است، زیرا توضیحات وب سرویس ارائه دهنده یک بار، زمانی که لینک ایجاد می شود، به دست می آید. در آینده هنگام دسترسی به این وب سرویس از توضیحات موجود وب سرویس استفاده می شود.
هنگام استفاده از لینک های پویا، توضیحات وب سرویس تامین کننده با هر بار فراخوانی وب سرویس توسط 1C:Enterprise به دست می آید که طبیعتا سرعت کار با این وب سرویس را کاهش می دهد. با این حال، مزیت این رویکرد، توانایی به دست آوردن توضیحات به روز از وب سرویس ارائه دهنده است. هنگام استفاده از پیوندهای ایستا، برای دریافت توضیحات واقعی وب سرویس، باید توضیحات WSDL را با استفاده از پیکربندی کننده دوباره وارد کنید و پیکربندی تغییر یافته را ذخیره کنید.
هنگام استفاده از راه‌حل‌های کاربردی، ممکن است شرایطی پیش بیاید که همان وب سرویس در آدرس‌های مختلف (URL) ارائه شود، اما دقیقاً توضیحات مشابهی (WSDL) داشته باشد. در این مورد، نیاز به بارگذاری توضیحات وب سرویس در پیکربندی وجود دارد (یک شی در درخت پیکربندی اشیاء ایجاد کنید)، اما در زمان استفاده آدرس خاصی را که وب سرویس در آن قرار دارد، مشخص کنید. روش ترکیبی به شما اجازه می دهد تا به این روش کار کنید. به عنوان مثال، وضعیت زیر را در نظر بگیرید: یک وب سرویس تکراری وجود دارد که کار می کند
برخی از عملکردها یک راه حل کاربردی که در 1C: Enterprise نوشته شده است از خدمات این سرویس استفاده می کند ، در حالی که آدرس سرویس می تواند متفاوت باشد (سرویس تکرار شده است) و توضیحات ثابت شده است. سپس می توان شرحی از وب سرویس را در برنامه کاربردی بارگذاری کرد و در تنظیمات برنامه کاربردی، آدرس نمونه خاصی از سرویس را وارد کرد که (آدرس) در حین کار استفاده می شود.
راه دیگری نیز در دسترس است: از یک پیوند پویا استفاده می شود، اما آدرس مکان وب سرویس از فایل توضیحات (WSDL) به دست نمی آید، اما به طور مستقیم در هنگام ایجاد شی مشخص می شود.
هنگام تلاش برای بارگذاری توضیحات سرویس وب در پیکربندی (ایجاد یک پیوند استاتیک) یا با استفاده از یک پیوند پویا (با استفاده از یک شی WSDfinition)، سیستم توضیحات سرویس وب بارگذاری شده (WSDL) را بررسی می کند. اگر خطایی در توضیحات سرویس وب وجود داشته باشد (از "نقطه دیدگاه" سیستم 1C: Enterprise)، توضیحات بارگیری نمی شود و استثنایی ایجاد می شود. متن استثنا شامل تشخیص دقیق دلایل عدم دانلود خواهد بود. خطاهای WSDL به ترتیبی که با آنها مواجه شده اند فهرست می شوند. هر خطای WSDL حاوی یک ورودی با جزئیات زیر است:

<Тип элемента с ошибкой>.<Имя>
[<Тип элемента с ошибкой>.<Имя>[…]]
<Описание ошибки>
<Тип элемента с ошибкой>
<Имя>
در این توضیحات:
● نوع عنصر خطا - نوع عنصر WSDL. اغلب با نام تگ در فایل xml که سرویس وب را توصیف می کند مطابقت دارد.
● شرح خطا - شرح خطای خاص.
● نام - نام شیء WSDL که در آن خطا رخ داده است.

نمونه ای از استفاده از پیوند WS استاتیک

به عنوان نمونه ای از استفاده از خدمات وب شخص ثالث، دسترسی به وب سرویسی را که قبلاً در مثال بالا ایجاد شده بود در نظر بگیرید.

ابتدا، یک شی پیکربندی مرجع WS جدید به درخت پیکربندی به نام InvoiceData اضافه می‌کنید که به سرویس منتشر شده ارجاع می‌دهد. برای این کار، توضیحات WSDL سرویس منتشر شده را وارد کنید و URL را به صورت مشخص کنید http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl. شرح واردات توضیحات WSDL در مقاله دیگری نوشته شده است.
پس از آن، برای مثال، در ماژول دریافت، می توانید رویه زیر را ایجاد کنید. بخش جدولی سند را با داده های فاکتور تامین کننده که با استفاده از وب سرویس تامین کننده دریافت شده است پر می کند.

روش GetDataInvoice(شماره فاکتور تامین کننده) پروکسی = WSReferences.InvoiceData. CreateWSPProxy("http://www.MyCompany.ru/shipment"، "اطلاعات فاکتور"، "اطلاعات فاکتور")؛ DataInvoice = Proxy.Get(); اگر DataInvoice = تعریف نشده سپسبرگشت؛ EndIf // فاکتور دریافتی را با داده های دریافتی پر کنیدبرای هر خط فاکتور از حلقه DataInvoice.Composition NewString = DocumentObject.Content.Add(); NewString.Quantity = StringInc.Quantity; NewLine.Price = LineInc.Price; NewLine.Amount = LineInc.Amount; // با توجه به داده های ارسال شده، مورد نامگذاری را بیابید // (مثلاً با بارکد) NewString.Nomenclature = Directories.Nomenclature. FindBy Props("بارکد"، StringInk.Nomenclature.BarCode) چرخه پایان پایان رویه

اگر آدرس مکان واقعی سرویس با آدرسی که هنگام بارگیری توضیحات وب سرویس در پیکربندی استفاده شده است متفاوت باشد،
سپس آدرس جدید باید به صراحت هنگام ایجاد شی WSProxy مشخص شود:

نمونه ای از استفاده از پیوند پویا WS

استفاده از پیوند پویا با استفاده از پیوند استاتیک تنها در نحوه ایجاد پروکسی WS متفاوت است و نیازی به ایجاد پیوند WS در درخت پیکربندی نیست.
در مقایسه با مثال ارائه شده در بخش قبل، بر خلاف ایجاد یک پروکسی بر اساس یک پیوند استاتیک، هنگام استفاده از یک پیوند پویا، پروکسی WS با استفاده از سازنده به صورت زیر ایجاد می شود:

// یک پروکسی WS بر اساس تعریف WS ایجاد کنید
تعریف = تعاریف جدید WSD ("http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl");
پروکسی = WSPProxy جدید (تعریف، "http://www.MyCompany.ru/shipment"، "اطلاعات صورتحساب"، "Invoice DataSoap");
در حالی که ایجاد یک پروکسی WS بر اساس یک پیوند استاتیک به صورت زیر است:

// یک پروکسی WS بر اساس پیوند ایجاد کنید
پروکسی = WSReferences.InvoiceData. WSPProxy را ایجاد کنید ("http://www.MyCompany.ru/shipment"، "اطلاعات فاکتور"، "اطلاعات فاکتور")؛
اگر آدرس مکان واقعی سرویس با آدرس مشخص شده در فایل WSDL مورد استفاده برای ایجاد تعریف وب سرویس متفاوت باشد، آدرس جدید باید به صراحت هنگام ایجاد شی WSProxy بر اساس تعریف وب سرویس مشخص شود:

// یک پروکسی WS بر اساس تعریف WS ایجاد کنید Definition = New SDDefinitions ("http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl"); پروکسی = WSPProxy جدید(تعریف، "http://www.MyCompany.ru/shipment"، "اطلاعات صورتحساب"، "Invoice DataSoap");

ویرایش ویژگی های وب سرویس

در تب Basic، نام، مترادف و نظر شی را وارد کنید.
در تب Operations، اشیاء تابع عملیات ایجاد می‌شوند که به نوبه خود می‌توانند اشیاء فرعی داشته باشند. پارامترهای لازم برای کار با اشیاء از این نوع. شرح اشیاء تابع در پالت خواص انجام می شود.

خواص "عملیات"

علاوه بر خصوصیات کلی اشیاء پیکربندی، یک عملیات وب سرویس حاوی ویژگی های زیر است:

● نوع بازگشت - نوع مقدار بازگردانده شده توسط عملیات وب سرویس. می تواند یک نوع مقدار XDTO یا یک نوع شی باشد
XDTO.
● Can be null - نشان می دهد که آیا مقدار بازگشتی می تواند null باشد یا خیر.
● In Transaction - نشان می دهد که آیا کد ماژول وب سرویس در یک تراکنش اجرا می شود یا خیر. اگر ویژگی تنظیم شده باشد، پس از فراخوانی وب سرویس، یک تراکنش به طور خودکار شروع می شود و هنگامی که سرویس وب پایان می یابد، تراکنش یا متعهد می شود یا تراکنش برگردانده می شود (بسته به نتایج اجرا). اگر ویژگی تنظیم نشده باشد، هنگام شروع اجرای ماژول وب سرویس
معامله شروع نمی شود
● نام روش - نام رویه صادر شده ماژول سرویس وب که هنگام فراخوانی این ویژگی اجرا می شود.
تب Subsystems نشان می دهد که اشیاء از این نوع به کدام زیرسیستم ها تعلق دارند.
ویژگی های زیر در تب Other تعریف شده است:
● Namespace URI - شامل URI فضای نام سرویس وب است. هر وب سرویس را می توان به روشی منحصر به فرد شناسایی کرد.
نام و URI فضای نامی که به آن تعلق دارد. فضای نام سرویس نباید با فضاهای نام شناخته شده ای که قبلاً در حال استفاده یا رزرو شده توسط سازمان های دیگر هستند یکسان باشد. توصیه می شود که فضای نام سرویس شامل قطعه ای باشد که منحصر به سازمانی است که سرویس وب را توسعه می دهد. برای مثال، برای سازمانی به نام Promresurs منطقی است که همه فضاهای نام را با پیشوندی مانند http://promresurs.com شروع کنیم. سپس URI فضای نام سرویس وب مانند خواهد شد http://promresurs.com/public/services/OurService.
● بسته‌های XDTO - فهرستی از بسته‌های XDTO که انواع آن‌ها را می‌توان به عنوان انواع بازگشت عملیات و انواع پارامتر عملیات وب سرویس استفاده کرد.
● Publish File Name - نام فایل توضیحات سرویس وب که در سرور وب قرار دارد.
دکمه Module ویرایشگر ماژول وب سرویس را باز می کند.

ویژگی های "پارامتر".
علاوه بر خصوصیات عمومی اشیاء پیکربندی، پارامتر عملیات وب سرویس حاوی ویژگی های زیر است:
● نوع مقدار - نوع مقدار پارامتر عملیات وب سرویس. ممکن است نوع مقدار XDTO یا نوع شیء XDTO باشد.
● می تواند خالی باشد - نشان می دهد که آیا مقدار پارامتر عملیات می تواند مقدار نامشخصی بگیرد یا خیر.
● جهت انتقال - جهت انتقال داده را با استفاده از این پارامتر مشخص می کند. مقادیر ممکن:
● ورودی - به این معنی است که پارامتر برای ارسال داده به سرویس وب استفاده می شود.
● خروجی - به این معنی است که پارامتر برای دریافت داده از سرویس وب استفاده می شود.
● ورودی-خروجی - به این معنی است که پارامتر را می توان هم برای انتقال داده و هم برای دریافت داده از سرویس وب استفاده کرد.

عنوان موضوع واقعاً یک سؤال است، زیرا من خودم نمی دانم چیست و برای اولین بار سعی می کنم در چارچوب این مقاله با آن کار کنم. تنها چیزی که می‌توانم تضمین کنم این است که کد زیر کار می‌کند، با این حال، عبارات من فقط فرضیات و حدس‌هایی درباره نحوه درک من از همه اینها خواهند بود. پس بزن بریم...

معرفی

ما باید با این شروع کنیم که مفهوم وب سرویس برای چه چیزی ایجاد شده است. تا زمانی که این مفهوم ظاهر شد، فناوری‌هایی در دنیا وجود داشت که به برنامه‌ها اجازه می‌داد تا از راه دور تعامل داشته باشند، جایی که یک برنامه می‌توانست روشی را در برنامه دیگری فراخوانی کند، که سپس می‌توانست روی رایانه‌ای که در شهر یا حتی کشور دیگری قرار دارد راه‌اندازی شود. همه اینها به اختصار RPC (Remote Procedure Calling - Remote Procedure Calling) نامیده می شود. به عنوان مثال می توان به فناوری های CORBA و برای جاوا - RMI (Remote Method Invoking - Remote Method Invocation) اشاره کرد. و به نظر می رسد همه چیز در آنها خوب است، به خصوص در CORBA، زیرا شما می توانید با آن در هر زبان برنامه نویسی کار کنید، اما چیزی هنوز گم شده بود. من معتقدم که نقطه ضعف CORBA این است که از طریق برخی از پروتکل های شبکه خود به جای HTTP ساده کار می کند، که در هر فایروال می خزد. ایده یک وب سرویس ایجاد چنین RPC بود که به بسته های HTTP منتقل شود. بنابراین توسعه استاندارد آغاز شد. مفاهیم اساسی این استاندارد چیست:
  1. صابون. قبل از فراخوانی یک روش راه دور، باید این تماس را در یک فایل XML با فرمت SOAP توصیف کنید. SOAP تنها یکی از بسیاری از نشانه گذاری های XML است که در خدمات وب استفاده می شود. هر چیزی که می خواهیم از طریق HTTP به جایی ارسال کنیم، ابتدا به یک توضیحات XML SOAP تبدیل می شود، سپس در یک بسته HTTP قرار می گیرد و از طریق TCP / IP به رایانه دیگری در شبکه ارسال می شود.
  2. WSDL. یک وب سرویس وجود دارد، یعنی. برنامه ای که روش های آن را می توان از راه دور فراخوانی کرد. اما استاندارد ایجاب می کند که توضیحاتی به این برنامه ضمیمه شود که می گوید "بله، اشتباه نکردید - این واقعاً یک وب سرویس است و می توانید روش های فلان و فلان را از آن فراخوانی کنید." این توضیحات توسط یک فایل XML دیگر که فرمت متفاوتی دارد، یعنی WSDL نشان داده می شود. آن ها WSDL فقط یک فایل XML است که یک وب سرویس را توصیف می کند و نه چیز دیگری.
چرا اینقدر کوتاه می پرسی؟ نمی توانید وارد جزئیات شوید؟ احتمالاً می توانید، اما برای این کار باید به کتاب هایی مانند Mashnin T. "Java Web Services" مراجعه کنید. در آنجا، برای 200 صفحه اول، شرح مفصلی از هر برچسب استانداردهای SOAP و WSDL وجود دارد. ارزششو داره؟ به نظر من نه، چون همه اینها به طور خودکار در جاوا ایجاد می شود و شما فقط باید محتویات متدهایی را بنویسید که قرار است از راه دور فراخوانی شوند. بنابراین، در جاوا یک API مانند JAX-RPC وجود دارد. اگر کسی نمی داند که وقتی می گوید جاوا فلان API دارد، به این معنی است که بسته ای با مجموعه ای از کلاس ها وجود دارد که فناوری مورد نظر را در بر می گیرد. JAX-RPC برای مدت طولانی از نسخه ای به نسخه دیگر تکامل یافت و در نهایت به JAX-WS تبدیل شد. بدیهی است که WS مخفف WebService است و ممکن است فکر کنید که این تغییر نام ساده RPC به یک کلمه پرطرفدار این روزها است. این چنین نیست، زیرا اکنون وب سرویس‌ها از ایده اصلی فاصله گرفته‌اند و نه تنها امکان فراخوانی روش‌های راه دور، بلکه ارسال پیام‌های سند در قالب SOAP را نیز فراهم می‌کنند. چرا این مورد نیاز است، من هنوز نمی دانم، بعید است که پاسخ در اینجا "در صورت نیاز ناگهانی" باشد. من خودم دوست دارم از رفقای با تجربه تر یاد بگیرم. و در نهایت، JAX-RS برای خدمات وب به اصطلاح RESTful ظاهر شد، اما این موضوع برای یک مقاله جداگانه است. این مقدمه را می توان تکمیل کرد، زیرا. در ادامه نحوه کار با JAX-WS را یاد خواهیم گرفت.

رویکرد عمومی

وب سرویس ها همیشه یک کلاینت و یک سرور دارند. سرور سرویس وب ما است و گاهی اوقات نقطه پایانی نامیده می شود (مانند نقطه پایانی که پیام های SOAP از مشتری می رسد). باید موارد زیر را انجام دهیم:
  1. رابط وب سرویس ما را شرح دهید
  2. این رابط را پیاده سازی کنید
  3. وب سرویس ما را راه اندازی کنید
  4. یک کلاینت بنویسید و از راه دور با روش وب سرویس مورد نظر تماس بگیرید
شما می توانید یک وب سرویس را به روش های مختلف راه اندازی کنید: یا یک کلاس را با یک متد اصلی توصیف کنید و وب سرویس را مستقیماً به عنوان یک سرور اجرا کنید، یا آن را روی سروری مانند Tomcat یا هر سرور دیگری مستقر کنید. در حالت دوم، ما خودمان سرور جدیدی راه‌اندازی نمی‌کنیم و پورت دیگری را روی رایانه باز نمی‌کنیم، بلکه به کانتینر سرولت تامکت می‌گوییم که «کلاس‌های وب سرویس را اینجا نوشتیم، لطفاً آنها را منتشر کنید تا همه کسانی که با شما تماس می‌گیرند بتوانند از آن استفاده کنند. وب سرویس صرف نظر از نحوه راه اندازی وب سرویس، ما همان مشتری را خواهیم داشت.

سرور

IDEA را راه اندازی کنید و یک پروژه جدید ایجاد کنید ایجاد پروژه جدید. یک نام مشخص کنید hellowebserviceو دکمه را فشار دهید بعد، سپس دکمه پایان. در پوشه srcیک بسته ایجاد کنید en.javarush.ws. در این بسته، رابط HelloWebService را ایجاد خواهیم کرد: package ru. جاواروش ws; // اینها حاشیه نویسی هستند، یعنی. راهی برای علامت گذاری کلاس ها و روش های ما، // مربوط به فناوری وب سرویس استواردات جاواکس jws WebMethod; واردات جاواکس jws سرویس وب؛ واردات جاواکس jws صابون SOAPBinding; // ما می گوییم که رابط ما به عنوان یک وب سرویس کار خواهد کرد@سرویس وب // می گویند که وب سرویس برای فراخوانی متدها استفاده خواهد شد@SOAPBinding(style = SOAPBinding.Style.RPC) رابط عمومی HelloWebService( // بگو این روش را می توان از راه دور فراخوانی کرد@WebMethod رشته عمومی getHelloString (نام رشته) ; ) در این کد کلاس های WebService و WebMethod به اصطلاح حاشیه نویسی هستند و کاری جز علامت گذاری رابط ما و روش آن به عنوان وب سرویس انجام نمی دهند. همین امر در مورد کلاس SOAPBinding نیز صدق می کند. تنها تفاوت این است که SOAPBinding یک حاشیه نویسی با پارامترها است. در این مورد، پارامتر style با مقداری استفاده می شود که می گوید وب سرویس نه از طریق پیام های سند، بلکه به عنوان یک RPC کلاسیک کار می کند. برای فراخوانی روش بیایید منطق رابط خود را پیاده سازی کنیم و یک کلاس HelloWebServiceImpl در بسته خود ایجاد کنیم. به هر حال، من توجه می کنم که کلاسی که با Impl ختم می شود یک قرارداد در جاوا است که بر اساس آن پیاده سازی رابط ها به این صورت تعیین شده است (Impl - از کلمه پیاده سازی، یعنی پیاده سازی). این یک الزام نیست و شما آزاد هستید که نام کلاس را هر چه می خواهید بگذارید، اما اخلاق خوب به آن نیاز دارد: بسته ru. جاواروش ws; // همان حاشیه نویسی برای توضیحات رابط،واردات جاواکس jws سرویس وب؛ // اما در اینجا با پارامتر endpointInterface استفاده می شود، // که نام کامل کلاس رابط سرویس وب ما را نشان می دهد@WebService(endpointInterface= "en.javarush.ws.HelloWebService") کلاس عمومی HelloWebServiceImpl HelloWebService را پیاده سازی می کند ( @Override string public getHelloString (نام رشته) ( // فقط سلام را برگردانیدبازگشت "سلام، " + نام + "!" ; ) ) بیایید وب سرویس خود را به عنوان یک سرور مستقل اجرا کنیم، i.e. بدون مشارکت هیچ تامکت و سرورهای کاربردی (این موضوع برای بحث جداگانه است). برای انجام این کار، در ساختار پروژه در پوشه srcبیایید یک بسته ru.javarush.endpoint ایجاد کنیم و در آن یک کلاس HelloWebServicePublisher با متد main: package ru ایجاد می کنیم. جاواروش نقطه پایانی؛ // کلاس برای راه اندازی وب سرور با خدمات وبواردات جاواکس xml ws نقطه پایانی؛ // کلاس خدمات وب ما import en. جاواروش 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://) در پورت 1986 در رایانه خود (localhost) داریم و از طرف دیگر، توضیحات WSDL سرویس وب ما را نشان می دهد. اگر برنامه را متوقف کنید، توضیحات و همچنین خود وب سرویس غیر قابل دسترس می شود، بنابراین ما این کار را انجام نمی دهیم، بلکه به نوشتن مشتری می رویم.

مشتری

در پوشه پروژه srcبیایید یک بسته ru.javarush.client ایجاد کنیم، و در آن کلاس HelloWebServiceClient با متد اصلی: package ru. جاواروش مشتری؛ // برای دریافت توضیحات wsdl و از طریق آن نیاز است // به خود وب سرویس برسدواردات جاوا خالص. URL; // چنین استثنایی هنگام کار با شی URL رخ می دهدواردات جاوا خالص. بدفرمURLException; // کلاس هایی برای تجزیه xml با توضیحات wsdl // و به تگ سرویس در آن برسیدواردات جاواکس xml فضای نام Qname; واردات جاواکس xml ws سرویس؛ // رابط وب سرویس ما (به موارد بیشتری نیاز داریم) import en. جاواروش ws hellowebservice; کلاس عمومی HelloWebServiceClient( public static void main (String args) MalformedURLException را پرتاب می کند( // پیوندی به توضیحات wsdl ایجاد کنیدآدرس URL = URL جدید( "http://localhost:1986/wss/hello?wsdl") ; // ما به پارامترهای سازنده بعدی در اولین تگ توضیحات WSDL نگاه می کنیم - تعاریف // به آرگومان 1 در ویژگی targetNamespace نگاه کنید // آرگومان دوم در ویژگی 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-objects
2. کار با خدمات وب به طور مستقیم

کار از طریق اشیاء COM

گزینه اول کمترین زمان و راحت تر است، اما نیاز به ثبت کتابخانه های Terrasoft در دستگاه مشتری (برای استفاده از اشیاء COM) دارد. در این حالت، تمام کار با سرویس های وب توسط اشیاء COM Terrasoft انجام می شود و دسترسی به داده ها و اشیاء را از طریق مدل شی پلت فرم Terrasoft فراهم می کند: IDataset، IselectQuery و غیره.

برای اتصال برنامه نویسی، باید کد زیر را اجرا کنید (به عنوان مثال در Jscript، اما این می تواند در هر زبانی که با اشیاء COM کار می کند پیاده سازی شود):

// Instantiate Connector and Configuration Objects COM
WSConnector = ActiveXObject جدید( "TSDskObjectLibrary.DskConnector") ; // برای نسخه های 3.4.0+، شی توسط ActiveXObject ("TSObjectLibrary.Connector") ایجاد می شود.
var WSCconfiguration = ActiveXObject جدید( "TSObjectLibrary.Configuration") ;
WSConfiguration.DBExecutorTypeCode = "WebServices" ;

// کش کردن اتصال ایجاد شده
Connector.Attributes("WSConnector" ) = WSConnector;

// تنظیم رشته اتصال و نام پیکربندی پیکربندی شده روی سرور
WSConfiguration.SetConnectionString(
""URL=http://192.168.227.128/TSWebServicesServerLibrary.dll/soap/IServer"" +
""ConfigurationName=Dev332"" ) ;

// پیکربندی را باز کنید
var IsConnected = WSConnector.OpenConfiguration(
ws پیکربندی،
1 , // نوع احراز هویت: 0 - Windows Authentication، 1 - Server
"ddd"، // نام کاربری
"")؛ // کلمه عبور

پس از اتصال موفقیت آمیز، می توانیم به هر شی دسترسی داشته باشیم، داده ها را دریافت کنیم و غیره. به عنوان مثال، به دست آوردن اطلاعات در مورد طرف مقابل:

// دریافت سرویس ds_Account از رابط به سرویس های وب
var AccountDataset = WSConnector.Services .GetSingleItemByUSI ("ds_Account" ) ;

// آماده سازی مجموعه داده: بستن و پاک کردن فیلترها
AccountDataset.Close();
EnableDatasetFilters(AccountDataset, false) ;

// اعمال فیلتر با شناسه رکورد جاری
ApplyDatasetFilter(AccountDataset, "ID" , dlData.Dataset ("ID") ، true) ;

// مجموعه داده را باز کنید
AccountDataset.Open();

// خواندن داده ها
if (AccountDataset.IsEOF ) (
var Value = "(بدون داده)" ; !}
edtWSName.Value = Value;
edtWSOfficialName.Value = Value;
edtWSCode.Value = Value;
) دیگر (
edtWSName.Value = AccountDataset.ValAsStr("Name") ;
edtWSOfficialName.Value = AccountDataset.ValAsStr("OfficialAccountName" );
edtWSCode.Value = AccountDataset.ValAsStr("کد") ;
}

// بستن مجموعه داده
AccountDataset.Close();

پیوست یک مثال کامل از کار با سرویس های وب در Jscript با استفاده از اشیاء COM است.

کار با خدمات وب به طور مستقیم

این نوع کار دشوارتر است زیرا تمام درخواست‌ها به سرویس‌های وب باید به طور مستقل ارسال شوند، و همچنین باید پاسخ سرور را خودتان پردازش کنید. این از اشیاء COM Terrasoft استفاده نمی کند، بنابراین نیازی به نصب و ثبت کتابخانه های Terrasoft بر روی هر رایانه مشتری که از آن خدمات وب درخواست می شود وجود ندارد.

درخواست ها به سرویس های وب را می توان بر اساس رابط آنها (WSDL) ارسال کرد - توضیحات همه روش ها با پارامترها.

برای ساده‌سازی توسعه برنامه‌ها برای کار با سرویس‌های وب، برخی از IDE‌ها، مانند ویژوال استودیو، یک واردات WSDL (افزودن مرجع WebService) ارائه می‌کنند، در حالی که خود IDE کلاس‌های بسته‌بندی را برای کار با سرویس‌های وب تولید می‌کند. با فراخوانی متدهای چنین کلاسی، به سادگی متدهای مربوط به وب سرویس را فراخوانی خواهید کرد.

ساده‌سازی این است که برای فراخوانی یک روش وب سرویس، باید یک درخواست کامل XML ارسال کنید و با کمک کلاس‌های wrapper، به سادگی متد مربوطه را با پارامترها فراخوانی کنید.

مثال در سی شارپ:

// یک سرویس گیرنده وب ایجاد کنید
ws IServer sc = new ws. ServerClient(); // ws.IServer یک کلاس wrapper برای کار با خدمات وب Terrasoft است
ws OpenConfigurationRequest rqOpenConfiguration = جدید ws. OpenConfigurationRequest(); // درخواست برای باز کردن پیکربندی
ws OpenConfigurationResponse rsOpenConfiguration = new ws. OpenConfigurationResponse();

// پیکربندی را باز کنید
rqOpenConfiguration. ACompressionLevel = 0 ; //بدون فشرده سازی (زیپ)
rqOpenConfiguration. AConfigurationName = پیکربندی;
rqOpenConfiguration. ADBExecutorTypeCode = "MSSQL" ;
rqOpenConfiguration. AUserName = نام کاربری;
rqOpenConfiguration. AUserPassword = رمز عبور;
rsOpenConfiguration = sc. OpenConfiguration (rqOpenConfiguration) ;

در عین حال، انتقال داده، تقسیم داده های بزرگ به بسته ها، تجزیه پاسخ سرور و غیره. باید توسط خودتان اجرا شود

پیوست یک نمونه کامل از کار با سرویس های وب در سی شارپ است.

با تشکر ویژه از الکساندر کراوچوک برای ارائه نمونه.

خوشبختانه هیچ محدودیتی برای کار با وب سرویس ها وجود ندارد.

افزودن یک وب سرویس به متادیتا

درخت پیکربندی، شاخه را باز کنید معمول هستند، به علاوه خدمات وب، یک وب سرویس جدید اضافه کنید (بیایید آن را my_ws بنامیم) و مشخصات را مطابق شکل پر کنید.

لازم به ذکر است که در مورد ویژگی های وب سرویس ها چند توضیح لازم است

  • بسته های XDTO— این فیلد لیست بسته‌های XDTO را مشخص می‌کند که انواع آن‌ها می‌توانند در مقدار بازگشتی در نتیجه عملیات وب سرویس استفاده شوند.
  • URI فضای نامرشته ای است که URI فضای نام را برای این وب سرویس مشخص می کند. هر وب سرویس را می توان به طور منحصر به فرد با ترکیب نام و فضای نام آن شناسایی کرد. باید به وضوح درک کرد که این ویژگی هیچ ربطی به آدرس فیزیکی وب سرور یا سایت سازمان و غیره ندارد. این فقط یک آدرس مجازی است. بنابراین، لازم است یک نام متمایز اختصاص دهید که بتواند به عنوان مثال، در مورد منطقه ای که وب سرویس در آن قرار دارد و استفاده می شود، بگوید. به طور خاص، ممکن است مخفف پیکربندی معمولی که وب سرویس به آن تعلق دارد وجود داشته باشد.

عملیات وب سرویس

برای اطمینان از عملکرد یک وب سرویس، لازم است عملیاتی برای آن ایجاد شود که اقدامات خاصی را انجام دهد و در صورت لزوم، داده های لازم را برگرداند.

به عنوان مثال، اجازه دهید عملیاتی برای وب سرویس خود ایجاد کنیم که عبارت کلاسیک "Hello world!" را برمی گرداند. بهش زنگ بزنیم سلام:

بیایید یک تابع در ماژول وب سرویس ایجاد کنیم سلام دنیا()، مرجعی را که در ویژگی مربوط به عملیات درج می کنیم.

تابع HelloWorld() بازگشت "Hello World!" ; EndFunctions

اما این عملیات یک ایراد دارد. نمی تواند داده های خام را انتقال دهد. برای این منظور، عملیات وب سرویس از اشیاء فرعی خود استفاده می کنند - گزینه ها.

بیایید یک عملیات دیگر اضافه کنیم - سلام آقا، و یک پارامتر برای آن ایجاد کنید نام.

این عملیات با فراخوانی تابع زیر به کاربر تبریک می گوید:

تابع HelloUser(UserName) بازگشت "Hello, " + Username + "!" ; EndFunctions

انتشار وب سرویس

اکنون همه ما آماده انتشار وب سرویس هستیم. برای انجام این کار، باید با حقوق مدیر وارد پیکربندی شوید. با دکمه سمت راست روی میانبر 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

رویه &AtServer ConnectAtServer() WSODefinition = New WSDDefinition( "http://localhost/professia1c/ws/my_ws.1cws?wsdl", "Sidorov" , "" ) ; WSProxy = WSProxy جدید (WSDDefinition, "http://www.site/" , "my_ws" , "my_wsSoap" ) ; VSPProxy. کاربر = "Sidorov" ; VSPProxy. رمز عبور = "" ; TextVS=VSPProxy. HelloUsr("Vasya") ; Message = New MessageToUser; پیام. متن = TextVS; پیام. برای گزارش () ; پایان رویه

همانطور که ممکن است حدس بزنید، نتیجه این روش متنی در جعبه پیام "سلام، واسیا!"

پیوندهای استاتیک WS

به جای ایجاد یک شیء به صورت برنامه ای تعاریف WSDما می توانیم یک شیء فراداده مرجع WS را مستقیماً در درخت پیکربندی ایجاد کنیم. در طول فرآیند ایجاد، پنجره ای نمایش داده می شود که از شما می خواهد آدرس WSDL تعریف را برای وارد کردن آن مشخص کنید:

پس از آن می توانیم مستقیماً به این لینک WS در کد مراجعه کنیم. و روش دسترسی به وب سرویس به شکل زیر خواهد بود:

رویه &روی سرور ConnectThroughReferenceOnServer() WSPProxy = WSReference. WSlink_my_ws. CreateWSProxy("http://www.site/" , "my_ws" , "my_wsSoap" ) ; VSPProxy. کاربر = "Sidorov" ; VSPProxy. رمز عبور = "" ; TextVS=VSPProxy. HelloUsr("Vasya") ; Message = New MessageToUser; پیام. متن = TextVS; پیام. برای گزارش () ; پایان رویه
 
مقالات توسطموضوع:
خدمات وب ما یک فایل توسط وب سرویس 1c را می پذیریم
کلمات کلیدی: وب سرویس، وب سرویس، SOAP، WSDL، ws link سلب مسئولیت و شرایط استفاده کلیه علائم تجاری که به طور تصادفی در این مقاله ذکر شده اند متعلق به صاحبان مربوطه می باشند. مقاله تحت مجوز Creative Commons Attribution-Share Alike 3.0 Unp منتشر شده است
وضوح صفحه نمایش ruButcher
9 اکتبر 2015 همانطور که قبلاً می دانید، بهترین پیکربندی ها نه توسط کاربران معمولی، بلکه توسط گیمرهای محترم ایجاد می شود که نه تنها می دانند چگونه خوب بازی کنند، بلکه به خوبی پارامترهای لازم را برای خود تنظیم می کنند. بسیاری از بازیکنان ادعا می کنند که پس از
تقلب برای ضد پس زدگی در cs 1 6
Anti scatter ks هم اکنون می توانید ضد پراکندگی را از وب سایت ما دانلود کنید. رایگان و بدون نیاز به ثبت نام در دسترس خواهد بود. این پیکربندی برای تیراندازی دقیق و پخش گلوله ارتقا یافته و روی آن کار شده است. این به شما امکان می دهد در cs 1.6 عکس بگیرید
بلندگوی کوچک قابل حمل بی سیم با سیستم تشدید فرکانس پایین
همانطور که می دانید، یک گوشی هوشمند مدرن قادر است هر کاری را از جمله از نظر سرگرمی برای کاربر خود حل کند. به عنوان مثال، یک عاشق موسیقی مشتاق فقط باید یک برنامه برای گوش دادن به موسیقی روی گجت خود نصب کند، پس از آن می تواند