Jak wdrożyć usługę internetową w Internecie. Usługi internetowe. Udostępnianie funkcjonalności poprzez usługi sieciowe

Tytuł tematu jest właściwie pytaniem, ponieważ... Sam nie wiem, co to jest i po raz pierwszy spróbuję z tym pracować w ramach tego artykułu. Jedyne, co mogę zagwarantować, to to, że przedstawiony poniżej kod będzie działał, ale moje wyrażenia będą jedynie założeniami i domysłami na temat tego, jak sam to wszystko rozumiem. Więc chodźmy...

Wstęp

Zacznijmy od tego, dlaczego powstała koncepcja usług sieciowych. Zanim koncepcja ta pojawiła się na świecie, istniały już technologie umożliwiające aplikacjom interakcję na odległość, gdzie jeden program mógł wywołać jakąś metodę w innym programie, który można było uruchomić na komputerze znajdującym się w innym mieście, a nawet kraju. Wszystko to jest określane w skrócie jako RPC (Remote Procedury Calling). Przykładami są technologie CORBA, a w przypadku Javy – RMI (Remote Method Invoking). I wszystko wydaje się być w nich dobre, zwłaszcza w CORBA, bo... Można z nim pracować w dowolnym języku programowania, ale wciąż czegoś brakowało. Uważam, że wadą CORBY jest to, że działa ona samodzielnie protokoły sieciowe zamiast prostego protokołu HTTP, który przejdzie przez dowolną zaporę ogniową. Ideą usługi internetowej było stworzenie RPC, który będzie wstawiany do pakietów HTTP. W ten sposób rozpoczął się rozwój standardu. Jakie są podstawowe pojęcia tego standardu:
  1. MYDŁO. Przed wywołaniem procedury zdalnej należy opisać to wywołanie Plik XML eFormat SOAP. SOAP to po prostu jeden z wielu znaczników XML używanych w usługach sieciowych. Wszystko, co chcemy wysłać gdzieś za pośrednictwem protokołu HTTP, jest najpierw konwertowane na opis XML SOAP, następnie umieszczane w pakiecie HTTP i wysyłane do innego komputera w sieci za pośrednictwem protokołu TCP/IP.
  2. WSDL. Istnieje serwis internetowy, tj. program, którego metody można wywoływać zdalnie. Ale standard wymaga, aby temu programowi towarzyszył opis mówiący: „tak, masz rację - to naprawdę jest usługa internetowa i możesz z niej wywoływać takie a takie metody”. Opis ten jest reprezentowany przez inny plik XML, który ma inny format, a mianowicie WSDL. Te. WSDL to po prostu plik XML opisujący usługę internetową i nic więcej.
Dlaczego pytasz tak krótko? Nie możesz być bardziej szczegółowy? Prawdopodobnie jest to możliwe, ale aby to zrobić, będziesz musiał sięgnąć do książek takich jak T. Mashnin, „Java Web Services”. Tam jest przez pierwsze 200 stron szczegółowy opis każdy znacznik standardów SOAP i WSDL. Czy warto to zrobić? Moim zdaniem nie, bo... wszystko to jest tworzone automatycznie w Javie i wystarczy napisać zawartość metod, które mają być wywoływane zdalnie. Tak więc w Javie pojawił się interfejs API taki jak JAX-RPC. Jeśli ktoś nie wie, to gdy mówią, że Java ma takie a takie API, to znaczy, że istnieje pakiet z zestawem klas, które hermetyzują daną technologię. JAX-RPC ewoluował z biegiem czasu z wersji na wersję i ostatecznie stał się JAX-WS. WS oczywiście oznacza WebService i można by pomyśleć, że jest to po prostu zmiana nazwy RPC jako popularnego obecnie hasła. To nieprawda, ponieważ Teraz usługi sieciowe odeszły od pierwotnego pomysłu i pozwalają nie tylko wywoływać metody zdalne, ale także po prostu wysyłać wiadomości dokumentowe w formacie SOAP. Nie wiem jeszcze, dlaczego jest to potrzebne; jest mało prawdopodobne, że odpowiedź będzie brzmieć „na wszelki wypadek”. Sam chciałbym uczyć się od bardziej doświadczonych towarzyszy. I na koniec pojawił się JAX-RS dla tzw. usług sieciowych RESTful, ale to temat na osobny artykuł. Na tym wstęp można zakończyć, bo... Następnie nauczymy się pracować z JAX-WS.

Ogólne podejście

W usługach internetowych zawsze jest klient i serwer. Serwer jest naszą usługą internetową i czasami nazywany jest punktem końcowym (np. punktem końcowym, do którego docierają komunikaty SOAP od klienta). Musimy wykonać następujące czynności:
  1. Opisz interfejs naszego serwisu internetowego
  2. Zaimplementuj ten interfejs
  3. Uruchom nasz serwis internetowy
  4. Napisz klienta i zdalnie wywołaj żądaną metodę usługi internetowej
Można uruchomić usługę internetową różne sposoby: albo opisz klasę za pomocą metody głównej i uruchom usługę internetową bezpośrednio jako serwer, albo wdróż ją na serwerze takim jak Tomcat lub inny. W drugim przypadku sami nie uruchamiamy nowego serwera i nie otwieramy kolejnego portu na komputerze, a po prostu przekazujemy kontenerowi serwletu Tomcat, że „napisaliśmy tutaj klasy usług sieciowych, prosimy o ich publikację, aby każdy, kto się z Państwem skontaktuje, mógł skorzystaj z naszego serwisu internetowego." Niezależnie od sposobu uruchomienia serwisu WWW, będziemy mieli tego samego klienta.

serwer

Uruchommy IDEA i twórzmy nowy projekt Utwórz nowy projekt. Wskażmy nazwę Witaj, serwisie internetowym i naciśnij przycisk Następny, a następnie przycisk Skończyć. W folderze źródło stwórzmy paczkę ru.javarush.ws. W tym pakiecie utworzymy interfejs HelloWebService: pakiet ru. javarush. ws; // to są adnotacje, tj. sposób na oznaczenie naszych klas i metod, // w odniesieniu do technologii usług sieciowych importuj javax. jws. Metoda internetowa; importuj javax. jws. Serwis internetowy; importuj javax. jws. mydło. Wiązanie SOAP; // mówimy, że nasz interfejs będzie działał jako usługa internetowa@Serwis internetowy // mówimy, że usługa internetowa będzie używana do wywoływania metod@SOAPBinding (styl = SOAPBinding. Styl. RPC) interfejs publiczny HelloWebService ( // mówimy, że tę metodę można wywołać zdalnie@WebMethod public String getHelloString(Nazwa ciągu) ; ) W tym kodzie klasy WebService i WebMethod są tzw. adnotacjami i nie robią nic poza oznaczeniem naszego interfejsu i jego metody jako usługi internetowej. To samo dotyczy klasy SOAPBinding. Jedyna różnica polega na tym, że SOAPBinding jest adnotacją z parametrami. W tym przypadku używany jest parametr style z wartością wskazującą, że serwis WWW będzie działał nie poprzez komunikaty dokumentowe, ale jako klasyczny RPC, tj. wywołać metodę. Zaimplementujmy naszą logikę interfejsu i utwórzmy w naszym pakiecie klasę HelloWebServiceImpl. Przy okazji dodam, że kończenie klasy za pomocą Impl to konwencja w Javie, zgodnie z którą tak określa się implementację interfejsów (Impl – od słowa implementacja, czyli implementacja). Nie jest to wymagane i możesz nazwać klasę jak chcesz, ale wymagają tego dobre maniery: package ru. javarush. ws; //taka sama adnotacja jak przy opisie interfejsu, importuj javax. jws. Serwis internetowy; // ale tutaj jest używany z parametrem endpointInterface, // wskazuje pełne imię i nazwisko klasa interfejsu naszego serwisu internetowego@WebService(interfejs punktu końcowego= „ru.javarush.ws.HelloWebService”) klasa publiczna HelloWebServiceImpl implementuje HelloWebService ( @Override public String getHelloString (nazwa ciągu) ( // po prostu odwdzięcz się powitaniem return "Witam, " + imię + "!" ; ) ) Uruchommy nasz serwis WWW jako niezależny serwer, tj. bez udziału jakichkolwiek serwerów Tomcat i aplikacji (to temat na osobną dyskusję). W tym celu w strukturze projektu w folderze źródło Stwórzmy pakiet ru.javarush.endpoint, a w nim utworzymy klasę HelloWebServicePublisher z metodą główną: package ru. javarush. punkt końcowy; // klasa do uruchamiania serwera WWW z usługami WWW importuj javax. xml. ws. Punkt końcowy; // klasa naszego serwisu internetowego importuj ru. javarush. ws. WitajWebServiceImpl; klasa publiczna HelloWebServicePublisher ( public static void main (String... argumenty) ( // uruchom serwer WWW na porcie 1986 // i na adres podany w pierwszym argumencie, // uruchom usługę internetową przekazaną w drugim argumencie Punkt końcowy. publikować( „http://localhost:1986/wss/witaj”, nowy HelloWebServiceImpl () ) ; ) ) Teraz uruchommy tę klasę klikając Shift+F10. Nic nie pojawi się w konsoli, ale serwer działa. Możesz to sprawdzić wpisując w przeglądarce wiersz http://localhost:1986/wss/hello?wsdl. Strona, która się otworzy, z jednej strony dowodzi, że na naszym komputerze (localhost) mamy serwer WWW (http://) działający na porcie 1986 (localhost), a z drugiej strony pokazuje opis naszego serwisu WWW w języku WSDL. Jeśli zatrzymasz aplikację, opis stanie się niedostępny, podobnie jak sam serwis, dlatego nie będziemy tego robić, tylko przejdziemy do pisania klienta.

Klient

W folderze projektu źródło Stwórzmy pakiet ru.javarush.client , a w nim klasę HelloWebServiceClient z metodą główną: package ru. javarush. klient; // potrzebne do uzyskania opisu wsdl i przejścia przez niego // dotarcie do samej usługi internetowej importuj Javę. internet. Adres URL; // ten wyjątek wystąpi podczas pracy z obiektem URL importuj Javę. internet. Źle sformułowany wyjątekURLE; // klasy do analizy XML z opisem wsdl // i przejdź do znajdującego się w nim znacznika usługi importuj javax. xml. przestrzeń nazw. QNazwa; importuj javax. xml. ws. Praca; // interfejs naszego serwisu internetowego (potrzebujemy więcej) importuj ru. javarush. ws. Witamusługa internetowa; klasa publiczna HelloWebServiceClient (public static void main (argumenty typu String) zgłasza wyjątek MalformedURLException ( // utwórz łącze do opisu wsdl Adres URL= nowy adres URL ( „http://localhost:1986/wss/hello?wsdl”) ; // Parametry kolejnego konstruktora sprawdzamy już w pierwszym tagu opisu WSDL – definicjach // spójrz na pierwszy argument w atrybucie targetNamespace // spójrz na drugi argument w atrybucie name QName qname = nowa QName („http://ws.site/” , „HelloWebServiceImplService” ) ; // Teraz możemy dotrzeć do znacznika usługi w opisie wsdl, Usługa serwisowa= Służba. utwórz (url, nazwa_q) ; // a następnie do zagnieżdżonego w nim znacznika portu, tak że // pobierz link do odległego od nas obiektu usługi internetowej HelloWebService hello = obsługa. getPort(HelloWebService.class); // Brawo! Możesz teraz wywołać metodę zdalną System. na zewnątrz. println (witaj. getHelloString („JavaRush”))); ) ) Dałem maksymalną liczbę komentarzy na temat kodu w aukcji. Nie mam nic do dodania, więc uciekamy (Shift+F10). Powinniśmy zobaczyć w konsoli tekst: Witaj, JavaRush! Jeśli tego nie widzisz, prawdopodobnie zapomniałeś uruchomić usługę internetową.

Wniosek

W tym temacie odbyła się krótka wycieczka po usługach sieciowych. Jeszcze raz powiem, że duża część tego co napisałem to moje przypuszczenia co do tego jak to działa i dlatego nie powinniście mi zbytnio ufać. Byłbym wdzięczny gdyby kompetentni ludzie mnie poprawili, bo wtedy się czegoś nauczę. UPD.

Usługi internetowe w 1C

W tym artykule omówiona zostanie integracja 1C z istniejącymi usługami internetowymi i wykorzystanie samego 1C jako usługi internetowej.

W tym przypadku usługi sieciowe będą rozumiane jako systemy działające w Internecie i umożliwiające interakcję z nimi nie tylko za pośrednictwem protokołu SOAP (który jest właśnie usługą sieciową), ale także w inny sposób, w tym poprzez zwykłe żądania HTTP(S).


Ryzyko związane z korzystaniem z usług internetowych 1C

Platforma 1C81 wprowadziła wdrożenie usług sieciowych.

Ale ich użycie jest obarczone ryzykiem:

  1. 1C8 nie działa dobrze na HTTPS, nie ma narzędzi diagnostycznych, więc czasami nie da się zrozumieć, dlaczego nawet jeśli jest certyfikat, usługa nie chce działać przez HTTPS. Rozwiązaniem jest wdrożenie usług internetowych za pośrednictwem CURL lub utworzenie tunelu HTTPS.
  2. 1C8 przestrzega swoich zasad sprawdzania poprawności schematów WSDL. Czasami z niewyjaśnionych powodów schemat WSDL nie chce zostać załadowany do łącza WS. Przyczynę możesz znaleźć tylko na forum partnerskim u jednego specjalisty. Nie ma narzędzi diagnostycznych schematu WSDL, nie jest wskazywana nawet przyczyna ani linia, w której ładowanie schematu zostało przerwane.

Zasady budowania usług sprzedażowych

Klient otrzymuje dokument sprzedaży (paragon) tylko w przypadku pomyślnego przeprowadzenia transakcji serwisowej. W przeciwnym wypadku możliwa jest sytuacja, gdy klient otrzymuje czek i ma pewność, że otrzymał usługę, choć w rzeczywistości jej nie otrzymał.

Korzystanie z zewnętrznych usług SOAP

Usługi sieciowe SOAP wykorzystują schematy WSDL i obiekty XDTO do reprezentowania danych.

Ładowanie WSDL

Aby skorzystać z usługi zewnętrznej należy pobrać jej schemat WSDL.

Sprawdzanie ważności schematu WSDL

Czasami schemat WSDL nie ładuje się do 1C. Ważność (poprawność) schematu możesz sprawdzić za pomocą dowolnego walidatora schematu WSDL, na przykład http://www.validwsdl.com/.

Należy wgrać schemat na jakąś stronę http (można użyć ftp) i wskazać adres pliku, w którym ładowany jest schemat:

Funkcje ładowania WSDL w 1C

Osobliwością ładowania WSDL w 1C jest to, że nie można załadować prawidłowych schematów. Nie ma wbudowanego walidatora, dlatego należy szukać błędu za pomocą analizy niszczącej, sukcesywnie zmniejszając liczbę elementów w obwodzie. Możesz na przykład usunąć opis usługi internetowej.

Przetwarzanie w celu testowania działającej zewnętrznej usługi internetowej

Aby przetestować działającą zewnętrzną usługę internetową, użyj przetwarzania „Test ArbitraryWebService.epf” z pakietu tego artykułu.

Do testowania można posłużyć się przykładem usługi Morpher, która odrzuca nazwy (adres usługi http://www.morpher.ru/WebServices/Morpher.asmx?WSDL):

W ten sposób możesz przetestować dowolną usługę posiadającą proste punkty wejścia zawierające parametry proste typy: liczba, data, ciąg znaków.

W trakcie przetwarzania możesz podać także login i hasło, które wymagane są do autoryzacji dostępu do serwisu.

Standardowe narzędzia do debugowania usług

Do debugowania możesz użyć programu SoapUI, który może wysłać dowolne żądanie do usługi internetowej i otrzymać od niej odpowiedź.

SOAP i HTTPS

Niestety SOAP w 1C zachowuje się dość kapryśnie podczas pracy poprzez protokół HTTPS, praktyka pokazuje, że nie da się osiągnąć połączenia HTTPS, choć na platformie deklarowana jest taka możliwość. Brak narzędzi diagnostycznych i debugujących pozwalających znaleźć przyczyny nienawiązania połączenia zbiera swoje żniwo. Dlatego wygodnie jest używać SOAP poprzez CURL.

Wbudowany mechanizm korzystania z protokołu HTTPS powoduje, że wszystkie certyfikaty muszą być publikowane w udostępniony plik pem w katalogu programu 1C.

Używanie 1C jako usługi

Zasady opracowywania usługi w oparciu o 1C

Operacja Witam

Zasadą dobrej formy jest utworzenie w serwisie operacji informującej o dostępności usługi. Ułatwia to życie integratorom, łatwiej będzie im sprawdzić, czy nawiązano komunikację z usługą.

Na przykład można użyć operacji Hello bez parametrów, która po prostu zwraca wartość logiczną True.

Publikowanie usługi internetowej

Procedura jest dobrze opisana w dokumentacji: file:///C:/Program%20Files/1cv81/AddDoc/RU/V8AddDoc81.htm#_Toc176167634:

Zadanie publikowania serwisów WWW sprowadza się do umieszczenia plików konfiguracyjnych *.1cws usług WWW w odpowiednim katalogu serwera WWW z odpowiednimi ustawieniami dla serwera WWW. Aby opublikować serwisy WWW należy wykonać polecenie menu „Administracja | Publikowanie usług internetowych.”

Wykonanie tego polecenia spowoduje otwarcie okna publikowania usług sieciowych.

Okno publikowania usług WWW zawiera ścieżkę do serwera WWW oraz dwie listy:

  • „Usługi sieciowe” – lista konfiguracji usług sieciowych;
  • „Publikacja” – lista serwisów WWW opublikowana na wskazanym serwerze WWW.

Za pomocą przycisku „Połączenie…” należy określić serwer WWW, na którym chcesz publikować usługi sieciowe.

Okno wyboru ścieżki serwera WWW umożliwia określenie ścieżki na dwa sposoby:

  • w zakładce „Pliki” – tę metodę stosuje się w przypadku, gdy publikacja odbywa się na tym samym komputerze, na którym zainstalowany jest serwer WWW. Ścieżką jest katalog lokalny odpowiadający stronie internetowej, z której zostanie wywołany opublikowany serwer WWW;
  • na zakładce „Witryna FTP” - tę metodę stosuje się, gdy zachodzi potrzeba opublikowania usługi internetowej na komputerze zdalnym. Aby opublikować, musisz określić parametry połączenia FTP za pomocą komputer zdalny oraz katalog, w którym zostanie opublikowany serwis WWW.

Wybrany serwis WWW zostanie opublikowany za pomocą przycisku „Publikuj”.

Aby anulować publikację serwisu internetowego, użyj przycisku „Usuń”.

Możesz publikować w katalogu lokalnym lub przez FTP. Można także publikować na serwerze zdalnym za pośrednictwem ścieżki UNC, jeśli serwer zdalny jest częścią sieci lokalnej.

Po publikacji usługa internetowa jest dostępna pod adresem „http://localhost/test.1cws” lub „http://xxx.ru/test.1cws”, gdzie xxx.ru to adres zdalnego serwera i localhost to typowy adres lokalnego serwera.

Autoryzacja do usługi internetowej 1C

Aby uzyskać dostęp do usługi, musisz przejść uwierzytelnienie.

Kwestie autoryzacji są dobrze rozwiązane tutaj: http://www.forum.mista.ru/topic.php?id=341168 oraz w pliku dokumentacji:///c:/Program%20Files/1cv81/AddDoc/RU/V8AddDoc81. htm

Zazwyczaj usługa internetowa działa w ramach jednego konkretnego użytkownika (zwykle specjalnie utworzonego). Możesz „dołączyć” użytkownika 1C za pomocą uwierzytelniania Windows do użytkownika Windows IUSR_ (wyłącz autoryzację 1C dla użytkownika). Alternatywnie możesz wyczyścić listę użytkowników 1C, wtedy autoryzacja nie jest wymagana.

Jeśli potrzebnych jest kilku użytkowników, możesz utworzyć kilka loginów dla serwera WWW i powiązać je z każdym z nich Użytkownik Windowsa i odpowiednio zarejestruj dostęp do użytkowników systemu Windows w 1C.

We właściwościach User i Password obiektu WSProxy nie jest używany login 1C, ale login użytkownika serwera WWW.

Testowanie usługi internetowej 1C

Aby przetestować 1C jako usługę internetową, użyj przetwarzania „Test ArbitraryWebService.epf”, jak opisano w sekcji „Testowanie działającej zewnętrznej usługi internetowej”.

Plik 1cws to opis WSDL usługi internetowej 1C.

Korzystanie z usług w Detalu

Zazwyczaj usługi detaliczne służą ludności do świadczenia różnych usług – przyjmowania płatności, spłaty pożyczek, przekazów pieniężnych, dokonywania zakupów oprogramowanie i tak dalej.

W takim przypadku w 1C generowany jest paragon za świadczoną usługę, w którym zapisywane są parametry transakcji. Następnie ten czek jest drukowany klientowi dokładna informacja o świadczonej usłudze. Istnieje możliwość wydrukowania czeku wstępnego, tak aby Klient własnoręcznie potwierdził wprowadzone dane swoim podpisem.

Usługę można zintegrować na różne sposoby z programem detalicznym napisanym w języku 1C (UT, Retail i inne):

  1. Przetwarzanie lub kod można zapisać w języku 1C, który wykonuje całą pracę z usługą.
  2. Można użyć programu, który współpracuje z usługą, a w 1C przesyła tylko informacje dotyczące kontroli wykrawania.

Organizacja danych serwisowych w 1C

Aby zapisać informacje o transakcji na paragonie, musisz utworzyć dodatkowy część tabelaryczna„Sprzedaż kompleksowa” ze szczegółami:

  • Nomenklatura - link do nomenklatury czeku.
  • Parametr - link do podręcznika „Sprzedaż kompleksowa: Parametry”.
  • Wartość - wartość parametru, typ złożony. Ciąg reprezentujący musi być dość długi (1024 znaki), aby pomieścić tekst kontrolny.

Katalog „Sprzedaż kompleksowa: Parametry” zawiera listę parametrów transakcji.

Bardziej opłaca się korzystać z części tabelarycznej niż zestawu szczegółów, ponieważ transakcja może mieć ich dużo, a przy innych kontrolach niezwiązanych z usługą dane te nie będą wykorzystywane i zajmą dodatkowa przestrzeń. Dodatkowo takie rozwiązanie jest uniwersalne dla dowolnej usługi i nie wymaga restrukturyzacji danych po wdrożeniu nowej usługi.

Sprzedający otrzymuje osobną zakładkę (lub formularz drukowany, aby nie zmieniać konfiguracji), w której może przeglądać tabliczkę ze szczegółami transakcji do czeku.

Korzystanie z przetwarzania w języku 1C

Spójrzmy na przykład usługi warunkowej Paym dla konfiguracji „Retail”.

  1. Stwórzmy predefiniowany element katalogu nomenklatury „Paym” w 1C. W trybie 1C:Enterprise po aktualizacji konfiguracji należy przypisać jej typ produktu „Usługa”.
  2. W procedurze „Dodaj pozycję do tabeli. część” modułu formularza „Rejestracja sprzedaży”, nazywamy przetwarzaniem pracy z usługą napisaną w języku 1C. Jeżeli płatność przebiegła pomyślnie, rejestrujemy i wysyłamy czek:
Jeśli (Nomenklatura = Katalogi.Nomenklatura.Paym) ORAZ (Typ transakcji przelewu. Rodzaje operacji Sprawdź KKM. Zwrot) Następnie Przetwarzanie płatności = Funkcje Podaj Przetwarzanie zewnętrzne („Paym”); PaymentForm = PaymentProcessing.GetForm(); Wynik = PaymentForm.OpenModal(); Jeśli wynik = niezdefiniowany, wówczas wróć; koniecJeśli; ThisObject.Write(DocumentWriteMode.Post); koniecJeśli;
  1. Processing powinien wydrukować paragon wstępny (jeśli jest wymagany), wypełnić część tabelaryczną sprzedaży złożonej oraz przygotować tekst wydruku czeku w predefiniowanym atrybucie „PaymCheckText”.
  2. W procedurze „Wyślij i wydrukuj paragon” modułu paragonów podmieniamy nazwę produktu na zapisaną w szczegółach paragonu. Tekst jest zastępowany tylko w przypadku sprzedaży; w przypadku zwrotów drukowana jest po prostu nazwa usługi, jak zwykle.
W przeciwnym razieJeśli typ transakcji przelewu.Typy operacjiSprawdź KKM.Zwrot i wybór.NomenclatureLink = Katalogi.Nomenklatura.Zapłać następnie //Osipov PaymMaster ComplexSales Line = ComplexSales.Find(Directories.ComplexSalesParameters.PaymReceiptText, "Właściwości"); Jeśli złożona linia sprzedaży nie jest zdefiniowana, wówczas Product.Name = skrócony LP (złożona linia sprzedaży. Wartość); koniecJeśli;

Osobną kwestią jest to, jak zapewnić sfinalizowanie transakcji. Te. jeśli transakcja miała miejsce w serwisie, jak upewnić się, że nie zostanie utracona w 1C. Najbardziej optymalnym sposobem jest uzgodnienie rejestrów. Ale to temat na osobne rozważania.

Korzystanie z programów integrujących się z 1C

XDTO

XDTO jest często używane w usługach internetowych. Oto najważniejsze wskazówki i przepisy dotyczące korzystania z XDTO w 1C.

XDTO na platformie 1C

Pakiety XDTO, opisane w gałęzi konfiguracji „Obiekty XDTO”, są dostępne do tworzenia typów i obiektów w globalnej fabryce XDTO Factory. Nie jest to od razu oczywiste.

Niektóre typy w schemacie nie mają nazwy; aby je uzyskać, należy przejść przez hierarchię typów.

W przykładzie opisano listę System zawierającą struktury XDTO. Aby stworzyć samą strukturę, trzeba było uzyskać jej typ w następujący sposób:

Typ = Factory.Type("urn:my.ru:MasterData:Business", "Business").Properties.Get("System").Type;

Typowe problemy z plikiem XDTO

Różne formaty schematów XSD

W niektórych formatach tagi nazywane są xs:, w niektórych xsd:, ale 1C bezpiecznie rozumie oba formaty. Kiedyś doszło do sytuacji, w której XSD został zaimportowany do 1C normalnie bez błędów, ale nie utworzył ani jednego pakietu. Powodem był brak atrybutu docelowa przestrzeń nazw odpowiednio na tagu 1C nie wiedział, w którym pakiecie umieścić diagram, ale nie generował błędów.

Wsparcie serwisowe

Biorąc pod uwagę, że usługa jest połączeniem dwóch systemów - 1C i zewnętrznego, w obu systemach mogą wystąpić błędy, co zmniejsza ogólną niezawodność działania.

Aby ułatwić zrozumienie przyczyn awarii usług, zaleca się zastosowanie zestawu środków.

Rejestrowanie żądań

Spinki do mankietów

  • XDTO
    • Dobry opis XDTO http://pro1c.org.ua/index.php?showtopic=214
  • Darmowe ciekawe usługi internetowe:
    • Aeroflot - informacje o rozkładach lotów
    • Morpher - deklinacja nazw http://www.morpher.ru/WebServices/Morpher.aspx
  • Niezmontowany:
    • Instalowanie i korzystanie z usług internetowych
      • v8: jak zmienić plik konfiguracyjny Apache?
      • v8: kontynuacja tematu z usługami internetowymi - nie mogę połączyć się z usługą internetową
      • wersja 8: Kontynuuję przeszukiwanie usług sieciowych — nie mogę utworzyć serwera proxy...
      • Księga wiedzy: v8: Korzystanie z zewnętrznych usług sieciowych w 1C:Enterprise 8;

usługi internetowe jest jednym z mechanizmów platformy służących do integracji z innymi systemami informatycznymi. Jest środkiem wspierającym SOA (Service-Oriented Architecture), architekturę zorientowaną na usługi, będącą nowoczesnym standardem integracji aplikacji i systemów informatycznych.

Istotną zaletą architektury zorientowanej na usługi jest to, że pozwala ona na rozwój infrastruktury przedsiębiorstwa w jednolity sposób, bez niszczenia istniejących rozwiązań. Jego zastosowanie pozwala zminimalizować koszty poprzez integrację heterogenicznych i starszych systemów z nowoczesnym krajobrazem przedsiębiorstwa. Pozwala na implementację luźno powiązanych komponentów oprogramowania w celu maksymalizacji ich ponownego wykorzystania.

Architektura zorientowana na usługi jest intensywnie rozwijana i wspierana przez głównych dostawców. Jest zbudowany w oparciu o usługi autonomiczne lub zarządzane zewnętrznie. Preferowanym sposobem ich wdrożenia są usługi sieciowe. Są niezależne od platformy, samodzielne i obsługiwane wszędzie.

Rozwiązanie aplikacyjne 1C:Enterprise 8 może być zarówno dostawcą usług internetowych, jak i konsumentem usług internetowych publikowanych przez innych dostawców.

Systemy korzystające z dowolnego sprzętu i platformy oprogramowania. Technologia usług internetowych jest niezależna od platformy.


Techniczna realizacja usług sieciowych

Jeśli rozwiązaniem aplikacyjnym jest dostawca usług internetowych, to zarówno w trybie plikowym, jak i klient-serwer, interakcja pomiędzy rozwiązaniem aplikacyjnym a odbiorcami usług internetowych odbywa się za pośrednictwem serwera WWW, przy użyciu modułu rozszerzenia serwera WWW.

W takim przypadku, gdy konsument uzyskuje dostęp do usługi sieciowej rozwiązania aplikacyjnego, wykonywany jest moduł usługi sieciowej. Moduł ten jest zawarty w konfiguracji i zawiera procedury, które są wykonywane podczas wywoływania określonych operacji serwisu WWW.

W przypadku wersji pracy klient-serwer moduł ten będzie wykonywany w klastrze. W przypadku wersji plikowej pracy - w module rozszerzenia serwera www.

Jeżeli rozwiązanie aplikacyjne jest konsumentem zewnętrznego dostawcy usług internetowych, wówczas w tym przypadku przeprowadzana jest interakcja między rozwiązaniem aplikacyjnym a dostawcą usług internetowych

Wymiana danych jest zwykle organizowana poprzez przesłanie pliku z jednego programu i załadowanie go do innego. Niektórzy programiści zapewniają programy stron trzecich dostęp do Baza danych SQL 1C (co wydaje się zdecydowanie nie zalecane).

Termin „wymiana danych” nie zawsze odpowiada zadaniu, czasami bardziej trafne jest określenie „dostarczanie danych”. Na przykład program zewnętrzny musi określić, czy taki klient istnieje w 1C i jego saldzie.

Zapewnienie dostępu do danych 1C jest nieprawidłowe ze względów bezpieczeństwa danych. Potrzebny jest raczej mechanizm weryfikacji po nazwie i haśle z dalszym zwrotem salda.

Takie podejście nazywa się podejściem usługowym, gdy program dostarcza nie dane, ale usługę, która pozwala zidentyfikować klienta i poznać jego saldo.

Jak to działa?

Funkcje z zewnątrz wywoływane są (uruchamiane) poprzez żądanie wykorzystujące protokół SOAP.

Służy do przekazywania parametrów i wyników. Aby pracować z usługami sieciowymi, należy posiadać podstawową wiedzę na temat platformy .

Usługi internetowe 1C

Usługa internetowa 1C to metoda, dzięki której można zezwolić na uruchomienie niektórych funkcji 1C poza bazą danych 1C, w tym z innych programów lub innych baz danych 1C.

Jest to lepsze niż zapewnienie bezpośredniego dostępu do danych 1C, ponieważ wywołując metodę (funkcję) usługi internetowej 1C, program zewnętrzny nie ma dostępu do danych. Funkcja w języku 1C niezależnie określa prawo programu zewnętrznego otrzymać określoną ilość danych na podstawie przekazanych parametrów (np. nazwa użytkownika i hasło).

W wielu przypadkach nie można stworzyć własnego pakietu XDTO, lecz skorzystać z domyślnego wybierając z listy pakiet www.sample-package.org

Metody usług internetowych 1C

Następnie musisz dodać listę funkcji (metod usługi internetowej 1C), które będą dostarczane zewnętrznie. Lepiej zadzwonić do nich po angielsku. Funkcja może mieć parametry.

Podstawowe typy do wykorzystania:

  • ciąg – ciąg
  • int lub integer – liczba całkowita
  • rzeczywista – liczba ułamkowa
  • data – data.

Dla każdej dodanej funkcji usługi internetowej 1C musisz ją utworzyć we właściwościach, tak jak to zrobiliśmy i tak dalej.

To właśnie ta funkcja 1C zostanie wykonana podczas wywoływania metody usługi internetowej 1C. Nie zapominaj, że zostanie to wykonane na serwerze 1C. Tryb plików do pracy z usługami internetowymi 1C nie jest zalecany.

Funkcja zwykle zwraca pewne dane. Zazwyczaj typem jest ciąg znaków i zwracany jest ciąg XML.

Ciąg XML można wygenerować przy użyciu obiektów języka 1C dla , lub możesz po prostu utworzyć ciąg tekstowy, w którym przechowywany jest tekst XML.

Publikowanie usługi internetowej 1C

Jak powiedzieliśmy wcześniej, inne programy muszą „wiedzieć”, że usługa internetowa 1C istnieje, ma taką listę metod i tak dalej.

Opis powinien być na stronie. Aby to zrobić, potrzebujesz:

  • Posiadaj stronę internetową
  • We właściwościach usługi internetowej 1C określ nazwę pliku z rozszerzeniem 1cws, który jest linkiem do opisu WSDL
  • Wgraj ten plik na stronę internetową w konfiguratorze korzystając z pozycji menu Administracja/Publikuj na serwerze WWW.

Przeglądarka powinna wyświetlać jakiś plik XML (przykład pliku WSDL tutaj http://ru.wikipedia.org/wiki/WSDL), a nie błąd, pustą stronę i niewyraźny tekst w jakimkolwiek kodowaniu.

Po pomyślnej publikacji można skorzystać z usługi internetowej 1C. Aby to zrobić w innym programie, którego musisz użyć tego internetu adres linków do usługi internetowej 1C.

Na przykład, Studio wizualne pozwala na dowolny język (C++, C#, Visual Basic) – dołącz do projektu usługę internetową 1C zgodnie z jej opisem WSDL i wygeneruj klasę do korzystania z usługi internetowej 1C.

Na szczęście nie ma żadnych ograniczeń w pracy z usługami internetowymi.

Dodawanie usługi internetowej do metadanych

Otwórz drzewo konfiguracyjne, gałąź Są pospolite, Dalej usługi internetowe, dodaj nową usługę internetową (nazwę ją my_ws) i uzupełnij właściwości jak pokazano na rysunku.

Należy dokonać kilku wyjaśnień dotyczących właściwości usług sieciowych.

  • Pakiety XDTO- To pole określa listę pakietów XDTO, których typy mogą być użyte w wartości zwracanej w wyniku operacji usług internetowych.
  • URI przestrzeni nazw to ciąg znaków określający identyfikator URI przestrzeni nazw tego serwisu internetowego. Każdą usługę internetową można jednoznacznie zidentyfikować na podstawie kombinacji jej nazwy i przestrzeni nazw. Konieczne jest jasne zrozumienie, że ta właściwość nie ma nic wspólnego z fizycznym adresem serwera WWW, stroną internetową organizacji itp. To tylko adres wirtualny. Dlatego należy nadać czytelną nazwę, która będzie informować np. o obszarze lokalizacji i zastosowaniu usługi internetowej. W szczególności skrót może być obecny typowa konfiguracja do którego należy serwis internetowy.

Operacje usług sieciowych

Aby zapewnić funkcjonowanie serwisu internetowego, konieczne jest utworzenie dla niego operacji, które wykonają określone działania i w razie potrzeby zwrócą niezbędne dane.

Jako przykład utwórzmy operację dla naszego serwisu internetowego, która zwróci klasyczną frazę „Hello world!” Zadzwońmy do niej Cześć:

Stwórzmy funkcję w module usługi internetowej Witaj świecie(), link do którego zostanie wstawiony do odpowiedniej właściwości operacji.

Funkcja HelloWorld() Zwróć „Witaj, świecie!” ; Funkcja końcowa

Ale ta operacja ma jedną wadę. Nie można do niego przenieść oryginalnych danych. W tym celu działania usług sieciowych wykorzystują podległe im obiekty - Opcje.

Dodajmy jeszcze jedną operację - WitajUsr i utwórz dla niego parametr Nazwa.

Ta operacja zwróci użytkownikowi powitanie poprzez wywołanie następującej funkcji:

Funkcja HelloUser(NazwaUżytkownika) Zwróć "Witam, " + Nazwa Użytkownika + "!" ; Funkcja końcowa

Publikowanie usługi internetowej

Teraz jesteśmy gotowi do opublikowania usługi internetowej. W tym celu należy zalogować się do konfiguratora z uprawnieniami administratora. Kliknij skrót 1C kliknij prawym przyciskiem myszy i wybierz odpowiednią pozycję menu:

Wybierz z menu Administracja —> Publikowanie na serwerze internetowym

W oknie, które zostanie otwarte, wpisz nazwę publikacji i zaznacz pole Publikuj usługi internetowe a także zaznacz stworzony przez nas serwis internetowy:

Linki WS

Do pracy z usługami internetowymi używany jest następujący obiekt 1C: Link WS. Jest to opis WSDL usługi internetowej uzyskany poprzez import ze źródła, w którym znajduje się usługa internetowa. Czyli przede wszystkim musimy znać adres, pod którym możemy uzyskać opis WSDL usługi internetowej. W odniesieniu do naszego przykładu, zgodnie z ustawieniami, jakie dokonaliśmy podczas tworzenia i publikacji serwisu, adres ten będzie wyglądał następująco:

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

Przyjrzyjmy się, z jakich części składa się ten adres.

  • http://localhost/- Adres ten wskazuje fizyczną lokalizację serwera internetowego. Ponieważ mam go na komputerze lokalnym, jest to localhost, ale w praktyce jest to albo adres IP serwera, albo jego nazwa
  • zawód1c to nazwa publikacji. Wprowadziliśmy go w pole Nazwa w oknie dialogowym, w którym opublikowano usługę internetową
  • ws- znak, że uzyskujemy dostęp do usługi internetowej
  • my_ws.1cws— nazwa pliku publikacji, którą podaliśmy we właściwościach podczas tworzenia serwisu WWW
  • ?wsdl- parametr wskazujący, że musimy uzyskać opis WSDL

Po opublikowaniu usługi internetowej, aby mieć pewność, że została ona pomyślnie opublikowana, możesz wpisać adres jej opisu WSDL w pasek adresu przeglądarka. W takim wypadku w oknie przeglądarki powinniśmy otrzymać plik XML o mniej więcej następującej treści:

  1. Korzystanie z dynamicznego łącza ws.
  2. Tworzenie statycznego łącza ws.

Przyjrzyjmy się każdej z tych metod.

Dynamiczne łącza WS

Procedura &OnServer ConnectOnServer() WSOdefinition = Nowa WSDefinition( „http://localhost/professia1c/ws/my_ws.1cws?wsdl”, „Sidorov”, „” ); WSProxy = Nowy WSProxy(WSOdefinition, "http://www.site/" , "my_ws" , "my_wsSoap" ) ; VSProxy. Użytkownik = "Sidorow" ; VSProxy. Hasło = "" ; TekstVS = VSProxy. WitajUsr("Wasja"); Wiadomość = Nowa wiadomość do użytkownika; Wiadomość. Tekst = TekstVS; Wiadomość. Zgłosić() ; Koniec procedury

Jak można się domyślić, wynikiem tej procedury będzie tekst w oknie wiadomości „Witaj, Vasya!”

Statyczne łącza WS

Zamiast programowo tworzyć obiekt Definicje WS możemy bezpośrednio utworzyć obiekt metadanych WS-link w drzewie konfiguracyjnym. W trakcie tworzenia wyświetli się okno z prośbą o podanie adresu definicji WSDL w celu jej zaimportowania:

Możemy wtedy odnieść się bezpośrednio do tego odniesienia WS w kodzie. Procedura dostępu do usługi internetowej będzie miała następującą formę:

Procedura &OnServer ConnectThroughLinkOnServer() VSProxy = WSLinks. WSlink_my_ws. CreateWSProxy("http://www.site/", "my_ws", "my_wsSoap" ); VSProxy. Użytkownik = "Sidorov" ; VSProxy. Hasło = "" ; TekstVS = VSProxy. WitajUsr("Wasja"); Wiadomość = Nowa wiadomość do użytkownika; Wiadomość. Tekst = TekstVS; Wiadomość. Zgłosić() ; Koniec procedury