Yerel web hizmeti. Web hizmeti nedir. .NET platformunda web servislerinin geliştirilmesi

  • 07.03.2020

Konu başlığı gerçekten bir soru çünkü Ben kendim ne olduğunu bilmiyorum ve ilk kez bu makale çerçevesinde onunla çalışmaya çalışacağım. Garanti edebileceğim tek şey, aşağıdaki kodun çalışacağıdır, ancak cümlelerim yalnızca tüm bunları nasıl anladığıma dair varsayımlar ve tahminler olacaktır. O zaman hadi gidelim...

giriiş

Web servisleri kavramının ne için yaratıldığı ile başlamamız gerekiyor. Bu kavram ortaya çıktığında, dünyada uygulamaların uzaktan etkileşime girmesine izin veren, bir programın başka bir programdaki bazı yöntemleri çağırabileceği ve daha sonra başka bir şehirde veya hatta ülkede bulunan bir bilgisayarda başlatılabileceği teknolojiler zaten vardı. Bütün bunlar RPC (Uzaktan Prosedür Çağrısı - uzaktan prosedür çağrısı) olarak kısaltılır. Örnekler arasında CORBA teknolojileri ve Java - RMI (Uzaktan Yöntem Çağırma - uzak yöntem çağırma) yer alır. Ve her şey onlarda iyi görünüyor, özellikle CORBA'da, çünkü onunla herhangi bir programlama dilinde çalışabilirsiniz, ancak yine de bir şey eksikti. CORBA'nın dezavantajının, herhangi bir güvenlik duvarını tarayacak olan basit HTTP yerine bazı ağ protokolleri aracılığıyla çalışması olduğuna inanıyorum. Bir web hizmeti fikri, HTTP paketlerine itilecek böyle bir RPC oluşturmaktı. Böylece standardın gelişimi başladı. Bu standardın temel kavramları nelerdir:
  1. SABUN. Bir uzak prosedürü çağırmadan önce, bu çağrıyı SOAP formatında bir XML dosyasında tanımlamanız gerekir. SOAP, web hizmetlerinde kullanılan birçok XML işaretlemesinden yalnızca biridir. HTTP üzerinden bir yere göndermek istediğimiz her şey önce XML SOAP açıklamasına dönüştürülür, ardından bir HTTP paketine konur ve TCP/IP üzerinden ağ üzerindeki başka bir bilgisayara gönderilir.
  2. WSDL. Bir web servisi var, yani. yöntemleri uzaktan çağrılabilen bir program. Ancak standart, bu programa “evet, yanılmadınız - bu gerçekten bir web hizmetidir ve ondan bu tür yöntemleri çağırabilirsiniz” diyen bir açıklama eklenmesini gerektirir. Bu açıklama, WSDL gibi farklı bir biçime sahip başka bir XML dosyasıyla temsil edilir. Şunlar. WSDL, yalnızca bir web hizmetini tanımlayan bir XML dosyasıdır ve başka bir şey değildir.
neden bu kadar kısa soruyorsun Daha fazla ayrıntıya giremez misin? Muhtemelen yapabilirsiniz, ancak bunun için Mashnin T. "Java Web Servisleri" gibi kitaplara başvurmanız gerekecek. Orada, ilk 200 sayfa için, SOAP ve WSDL standartlarının her etiketinin ayrıntılı bir açıklaması vardır. Buna değer mi? Bence hayır çünkü tüm bunlar Java'da otomatik olarak oluşturulur ve yalnızca uzaktan çağrılması gereken yöntemlerin içeriğini yazmanız yeterlidir. Yani Java'da JAX-RPC gibi bir API var. Java'nın şu veya bu API'ye sahip olduğunu söylediğinde kimse bilmiyorsa, bu, söz konusu teknolojiyi içine alan bir dizi sınıfa sahip bir paket olduğu anlamına gelir. JAX-RPC, uzun bir süre sürümden sürüme gelişti ve sonunda JAX-WS'ye dönüştü. WS, açıkçası WebService'in kısaltmasıdır ve bunun, RPC'nin bugünlerde popüler bir moda sözcüğe basit bir şekilde yeniden adlandırılması olduğunu düşünebilirsiniz. Bu böyle değil, çünkü artık web servisleri orijinal fikirden uzaklaştı ve sadece uzak yöntemlerin çağrılmasına değil, aynı zamanda sadece SOAP formatında belge mesajları gönderilmesine de izin verdi. Buna neden ihtiyaç duyuluyor, henüz bilmiyorum, buradaki cevabın “her ihtimale karşı, aniden ihtiyaç duyulursa” olması pek olası değil. Ben kendim daha deneyimli yoldaşlardan öğrenmek istiyorum. Ve son olarak, RESTful olarak adlandırılan web servisleri için JAX-RS ortaya çıktı, ancak bu ayrı bir makalenin konusu. Bu giriş tamamlanabilir, çünkü. sonra JAX-WS ile nasıl çalışacağımızı öğreneceğiz.

Genel yaklaşım

Web servislerinin her zaman bir istemcisi ve bir sunucusu vardır. Sunucu bizim web hizmetimizdir ve bazen uç nokta olarak adlandırılır (örneğin, istemciden gelen SOAP mesajlarının ulaştığı uç nokta gibi). Aşağıdakileri yapmamız gerekiyor:
  1. Web servisimizin arayüzünü tanımlayın
  2. Bu arayüzü uygula
  3. Web hizmetimizi başlatın
  4. Bir istemci yazın ve istediğiniz web hizmeti yöntemini uzaktan arayın
Bir web hizmetini farklı şekillerde başlatabilirsiniz: ya bir ana yöntemle bir sınıfı tanımlayın ve web hizmetini doğrudan bir sunucu olarak çalıştırın ya da Tomcat veya başka bir sunucuya dağıtın. İkinci durumda, kendimiz yeni bir sunucu başlatmıyoruz ve bilgisayarda başka bir bağlantı noktası açmıyoruz, ancak Tomcat servlet konteynerine “burada web servis sınıfları yazdık, lütfen bunları yayınlayın ki sizinle iletişime geçen herkes kullanabilsin” diyoruz. web hizmeti. Web hizmetinin nasıl başlatıldığına bakılmaksızın, aynı istemciye sahip olacağız.

sunucu

IDEA'yı başlatın ve yeni bir proje oluşturun Yeni Proje Oluştur. Bir ad belirtin merhabaweb servisi ve düğmeye basın Sonraki, ardından düğme Bitiş. klasörde kaynak paket oluştur tr.javarush.ws. Bu pakette HelloWebService arayüzünü oluşturacağız: package ru. javarush. ws; // bunlar ek açıklamalardır, yani. sınıflarımızı ve yöntemlerimizi işaretlemenin bir yolu, // web servis teknolojisi ile ilgili olarak javax'ı içe aktarın. jws. WebYöntem; javax'ı içe aktarın. jws. internet servisi; javax'ı içe aktarın. jws. sabun. SABUN Bağlama; // arayüzümüzün web servis olarak çalışacağını söylüyoruz@İnternet servisi // metotları çağırmak için web servisinin kullanılacağını söyle@SOAPBinding(style = SOAPBinding.Style.RPC) genel arayüzü HelloWebService( // bu yöntemin uzaktan çağrılabileceğini söyle@WebMethod public String getHelloString(String name) ; ) Bu kodda, WebService ve WebMethod sınıfları annotation olarak adlandırılır ve bizim arayüzü ve metodunu bir web servisi olarak işaretlemekten başka bir şey yapmazlar. Aynısı SOAPBinding sınıfı için de geçerlidir. Tek fark, SOAPBinding'in parametreler içeren bir açıklama olmasıdır. Bu durumda style parametresi, web servisinin belge mesajları üzerinden değil, klasik bir RPC olarak çalışacağını belirten bir değer ile kullanılır, yani. yöntemi çağırmak için. Arayüz mantığımızı uygulayalım ve paketimizde bir HelloWebServiceImpl sınıfı oluşturalım. Bu arada, Impl ile biten sınıfın Java'da arayüzlerin uygulanmasının bu şekilde belirlendiği bir kural olduğunu not ediyorum (Impl - uygulama kelimesinden, yani uygulamadan). Bu bir gereklilik değildir ve sınıfı istediğiniz gibi adlandırmakta özgürsünüz, ancak görgü kuralları bunu gerektirir: paket ru. javarush. ws; // arayüz açıklamasıyla aynı açıklama, javax'ı içe aktarın. jws. internet servisi; // ama burada endpointInterface parametresiyle birlikte kullanılıyor, // web servisimizin arayüz sınıfının tam adını belirten@WebService(endpointInterface= "tr.javarush.ws.HelloWebService") genel sınıf HelloWebServiceImpl, HelloWebService'i uygular ( @Override public String getHelloString (String name) ( // sadece selamlamayı geri ver dönüş "Merhaba," + isim + "!" ; ) ) Web servisimizi bağımsız bir sunucu olarak çalıştıralım, yani. herhangi bir Tomcat ve uygulama sunucusunun katılımı olmadan (bu ayrı bir tartışma konusudur). Bunu yapmak için, klasördeki proje yapısında kaynak hadi bir ru.javarush.endpoint paketi oluşturalım ve bunun içinde main yöntemiyle bir HelloWebServicePublisher sınıfı oluşturalım: ru paketi. javarush. uç nokta; // web servisleri ile bir web sunucusu başlatmak için sınıf javax'ı içe aktarın. xml. ws. uç nokta; // web servisimizin sınıfı ithalat tr. javarush. ws. merhabawebserviceimpl; public class HelloWebServicePublisher( public static void main(String. . . args)( // web sunucusunu 1986 bağlantı noktasında başlat // ve ilk argümanda belirtilen adreste, // ikinci argümanda iletilen web hizmetini başlat uç nokta. Yayınla( "http://localhost:1986/wss/merhaba", yeni HelloWebServiceImpl () ); )) Şimdi bu sınıfı tıklayarak çalıştırın Üst Karakter+F10. Konsolda hiçbir şey görünmeyecek, ancak sunucu çalışıyor. Tarayıcınıza http://localhost:1986/wss/hello?wsdl yazarak bunu doğrulayabilirsiniz. Açılan sayfa bir yandan bilgisayarımızda (localhost) 1986 portunda çalışan bir web sunucumuz (http://) olduğunu kanıtlarken, diğer yandan web servisimizin WSDL açıklamasını göstermektedir. Uygulamayı durdurursanız, açıklamaya ve web hizmetinin kendisine erişilemez hale gelir, bu yüzden bunu yapmayacağız, ancak istemciyi yazmaya devam edeceğiz.

Müşteri

proje klasöründe kaynak hadi ru.javarush.client paketini ve içinde HelloWebServiceClient sınıfını ana yöntemle oluşturalım: ru paketi. javarush. müşteri; // wsdl açıklamasını almak için gerekli // web servisinin kendisine ulaş java'yı içe aktarın. ağ. URL; // URL nesnesiyle çalışırken böyle bir istisna oluşacak java'yı içe aktarın. ağ. MalformedURLException; // xml'yi wsdl açıklamasıyla ayrıştırılacak sınıflar // ve içindeki servis etiketine ulaşın javax'ı içe aktarın. xml. ad alanı. Qname; javax'ı içe aktarın. xml. ws. hizmet; // web servisimizin arayüzü (daha fazlasına ihtiyacımız var) ithalat tr. javarush. ws. merhabaweb servisi; public class HelloWebServiceClient( public static void main(String args) MalformedURLException( // wsdl açıklamasına bir bağlantı oluşturun URL url = yeni URL( "http://localhost:1986/wss/merhaba?wsdl") ; // İlk WSDL açıklama etiketinde bir sonraki kurucunun parametrelerine bakıyoruz - tanımlar // targetNamespace özelliğindeki 1. argümana bakın // name niteliğine 2. argüman bakışı QName qname = new QName ("http://ws.site/", "HelloWebServiceImplService"); // Artık wsdl açıklamasındaki servis etiketine ulaşabiliriz, Servis hizmeti = Servis. oluştur (url, qname); // ve sonra içinde yuvalanmış bağlantı noktası etiketine, böylece // bizden uzaktaki bir web hizmeti nesnesine referans alın HelloWebService merhaba = hizmet. getPort(HelloWebService.class) ; // Yaşasın! Artık uzak yöntemi çağırabilirsiniz. Sistem. dışarı. println(merhaba. getHelloString("JavaRush" ) ) ; )) Listedeki koda maksimum yorum yaptım. Ekleyecek bir şeyim yok, bu yüzden çalıştırın (Shift + F10). Konsoldaki metni görmeliyiz: Merhaba, JavaRush! Görmediyseniz, muhtemelen web hizmetini başlatmayı unuttunuz.

Çözüm

Bu konuda, web servislerine kısa bir gezi sunuldu. Bir kez daha, yazdıklarımın çoğu nasıl çalıştığına dair benim tahminim ve bu yüzden bana çok fazla güvenilmemeli. Bilgili arkadaşlar düzeltirse sevinirim çünkü o zaman bir şeyler öğrenirim. UPD.

Dipnot: Kullanım alanları. Avantajlar .NET platformu için web hizmetleri geliştirmenin özellikleri. Bir web hizmetinin tanımı ve keşfi

XML Web Hizmeti nedir?

Bilgi teknolojisinin gelişmesiyle birlikte, program yazmaya yönelik farklı yaklaşımlar ortaya çıkmıştır: modüler programlama, olay odaklı programlama, bileşen odaklı programlama Ve tasarım. Bu yaklaşımların mantıksal devamı hizmet odaklıydı. yazılım geliştirme.

Hizmet odaklı yaklaşımların kullanılması, mikro düzeyden (nesne düzeyinde) ziyade makro düzeyde (hizmet düzeyi) yeniden kullanım (yeniden kullanım) hakkında konuşmamızı sağlar. Hizmet odaklı bir yaklaşım, çok çeşitli uygulamaların birbirinin işlevselliğini kullanmasına izin veren basit ve genel kabul görmüş standartların kullanımını içerir. Hizmetler, çeşitli platformlarda çok çeşitli programlama dilleri kullanılarak yazılabilir. Ek olarak, hizmetler dünyanın herhangi bir yerinde ayrı ayrı veya bir yazılım paketinin parçası olarak dağıtılabilir ve böylece ağ üzerinden işlevlerine erişim sağlar.

Hadi arayalım hizmet bir iş işlevini uygulayan ve aşağıdaki özelliklere sahip bir kaynak:

  • yeniden kullanılabilir;
  • bir veya daha fazla açık teknolojiden bağımsız arayüz tarafından tanımlanır;
  • diğer benzer kaynaklara gevşek bir şekilde bağlıdır ve kaynakların birbirleriyle etkileşime girmesine izin veren iletişim protokolleri aracılığıyla çağrılabilir.

Hizmetin özel bir durumu, bir XML web hizmetidir.

XML Web Hizmetiözel bir web uygulaması türüdür:

  • bir web sunucusunda konuşlandırılmış;
  • harici istemciler tarafından çağrılabilecek web yöntemlerini yayınlar;
  • web yöntemlerini çağırma komutları olan HTTP isteklerinin alınmasını bekler;
  • web yöntemlerini yürütür ve sonuçları döndürür.

Geleneksel bir web uygulamasından farklı olarak, bir web hizmetinin kullanıcı arayüzü yoktur. Bunun yerine bir API'si vardır, yani bir web hizmeti, uzaktan (örneğin İnternet üzerinden) çağrılabilen işlevler (web yöntemleri) sağlar. Web hizmeti, son kullanıcılara hizmet vermek için tasarlanmamıştır. Görevi, web uygulamaları, GUI uygulamaları veya konsol uygulamaları olsun, diğer uygulamalara hizmet sağlamaktır.

Bir Web hizmeti, hisse senedi fiyatları hakkında gerçek zamanlı bilgi sağlayabilir, kredi kartlarını kontrol edebilir veya hava durumunu bildirebilir. Web servisleri, geleneksel uygulamalar kadar çeşitlidir.

Web hizmetleri belirli bir şirketin mülkiyetinde değildir. Açık protokollere (SOAP, HTTP, vb.) dayalı bir endüstri standardıdır. Web hizmetleri çeşitli platformlarda (Windows veya UNIX çalıştıran sunucular dahil) dağıtılır. Web hizmetleri birçok geliştirme aracı kullanılarak geliştirilebilir (bir metin düzenleyiciden Microsoft Visual Studio ailesine kadar).

Çoğu web hizmetinin yöntemleri, SOAP mesajlarını içeren HTTP istekleri tarafından çağrılır. SOAP, HTTP ve diğer protokoller üzerinden uzak prosedürleri çağırmak için bir XML dilidir (XML sözlüğü) (SOAP'ın tam açıklaması http://www.w3.org/TR/SOAP) .

Web servislerinin diğer uzaktan arama teknolojileri arasındaki yeri

Çok sayıda uzaktan çağırma protokolü ve teknolojisi vardır: Microsoft Dağıtılmış Bileşen Nesne Modeli (DCOM), Nesne Yönetim Grubunun Ortak Nesne İstek Aracısı Mimarisi (CORBA), Sun'ın Uzak Yöntem Çağrısı (RMI), . NET Uzaktan İletişim, XML Web Hizmetleri.

Bu bileşen odaklı teknolojilerin tümü (DCOM, CORBA ve RMI) Intranet uygulamalarında uzun yıllardır başarıyla kullanılmaktadır. Sağlam, ölçeklenebilir bir mimari sağlarlar. Ancak, bu teknolojileri internette kullanmanın iki büyük sorunu vardır. İlk olarak, birbirleriyle iyi etkileşime girmiyorlar. Tüm teknolojiler nesneler üzerinde çalışır, ancak ayrıntılarda önemli ölçüde farklılık gösterir: yaşam döngüsü yönetimi, yapıcılar için destek ve devralma desteğinin derecesi. İkinci, daha önemli yön, RPC etkileşimlerine odaklanmanın, açık nesne yöntemi çağrılarına dayalı olarak sıkı bir şekilde bağlanmış sistemlerin oluşturulmasına yol açmasıdır.

Bu teknolojilerin aksine, XML Web Servisleri ve . NET Remoting'in tam olarak uygulanması nesne yönelimli yaklaşım web programlama için.

XML Web Hizmeti- İnternet istemcilerine bir dizi API işlevi veya web yöntemi sağlayan bir bileşen. XML, web hizmetleri ve istemcileri veri alışverişi için kullandığından, adın bir parçasıdır. Web hizmetleri, HTTP, XML (Genişletilebilir İşaretleme Dili), SOAP (Basit Nesne Erişim Protokolü - uygulamaların nasıl etkileşime girebileceğini, yani HTTP ve diğer protokolleri kullanarak birbirlerinin yöntemlerini çağırabileceğini açıklayan bir İnternet standardı) gibi açık standartları temel alır. Web servislerinin temel görevi, programlar arası etkileşimi sağlamaktır. Birçoğu UNIX sunucularında çalışır ve bunlara Windows istemcileri tarafından erişilir. Web servislerine iletilen veriler XML'e serileştirilir ve SOAP paketlerinde gönderilir. Bu tür mesajların içeriğiyle ilgili meta veriler, web hizmetinin WSDL sözleşmesinde ve XSD şemalarında saklanır. Bu yaklaşımın ana avantajı, meta verilerin okunabilirliğidir. Bir geliştirici, bir web hizmetinin tüm açıklamasını kolayca görüntüleyebilir ve hatta SOAP paketlerini ayrıştıran kendi modülünü oluşturabilir.

.NET Uzaktan İletişim dağıtılmış nesneler için altyapı sağlar. Mesaj geçişine dayalı basit bir web hizmetleri mimarisinden çok daha karmaşıktır. . NET Remoting, parametreleri referansa ve değere göre geçirmeyi, geri aramaları, çoklu nesne aktivasyonunu ve yaşam döngüsü yönetimi ilkelerini içerir. Bu özellikleri kullanmak için istemci uygulamasının tüm teknolojilerde yetkin olması gerekir. Veri girişi. NET Remoting, ikili veya SOAP biçiminde gönderilir. Bununla birlikte, her durumda, iletilen bilgilerin yapısı hakkındaki meta veriler, ortak dil çalışma zamanında bulunur. Ortak dil çalışma zamanı (CLR) olmadan, istemci uygulaması . NET Remoting SOAP başlıkları. Yani. NET Remoting, web hizmetlerinden önemli ölçüde daha yüksek gereksinimlere sahiptir.

.NET platformunda web servislerinin geliştirilmesi

Web servisleri yazmanın birçok yolu vardır. Elle veya Microsoft, IBM ve diğerleri tarafından sağlanan SOAP araçları kullanılarak geliştirilebilirler.Web servislerini Microsoft ile yazmak. NET'in iki avantajı vardır:

  • .NET Framework, bir sınıf kitaplığı sağlayarak ve bireysel geliştirme adımlarını otomatikleştirerek geliştirme sürecini büyük ölçüde basitleştirir;
  • .NET Framework ile yazılan web servisleri, yönetilen uygulamalardır. Yani, bu tür uygulamalarda bellek sızıntıları, yanlış başlatılan işaretçiler ve diğer tipik programlama sorunları ile ilgili herhangi bir sorun yoktur.

oluşturma

İki sayının toplamını gerçekleştiren basit bir AdditionService web hizmeti geliştirelim. Parametre olarak iki tamsayı alan ve bir tamsayı döndüren yalnızca bir Add yöntemine sahip olacaktır. AdditionService, Microsoft .NET Framework kullanarak web hizmetlerini programlamak için birkaç önemli ilkeyi gösterir.

  • Web servisleri ASMX dosyaları olarak uygulanmaktadır. ASMX, ana ASP .NET Machine.config yapılandırma dosyasında ASP .NET'e (daha özel olarak ASP.NET HTTP İşleyicisi) kayıtlı özel bir dosya adı uzantısıdır.
  • ASMX dosyaları @WebService yönergesi ile başlar. Bu yönerge en azından web hizmetinin oluşturduğu sınıfı belirten Class özniteliğini içermelidir.
  • Web hizmeti sınıfları, isteğe bağlı Web Hizmeti özniteliklerine sahip olabilir. Bu örnekte, bu öznitelik, web hizmetinin adını ve kullanıcı tarayıcıda AdditionService.asmx'i aradığında HTML sayfasında görüntülenen açıklamayı belirtir.
  • Web yöntemleri, Web hizmeti sınıfının genel yöntemlerine WebMethod özniteliği atanarak bildirilir. Dahili olarak kullanılan ancak harici istemciler tarafından kullanılamayan yardımcı yöntemler için bu öznitelik atlanır.
  • HTTP, XML ve SOAP "görünmezdir". XML verileri ve SOAP mesajları .NET Framework tarafından işlenir.

AdditionService.asmx<%@ WebService language="C#" Class="AddService" %>System.Web.Services sınıfını kullanarak System kullanarak AddService ( public int Add (int a, int b) ( return a + b ) )

Küçük boyutuna rağmen AdditionService.asmx, bir ASP.NET web sunucusuna kurulduğunda eksiksiz bir web hizmetidir. Yöntemleri SOAP, HTTP GET ve HTTP POST ile çağrılır ve sonuçları SOAP yanıtları veya basit XML sarmalayıcıları olarak döndürebilir.

Arka plan kodu kullanılarak web servis sınıfları asmx dosyalarından ayrı dosyalara alınabilir.

Web servisleri kullanımı destekler karmaşık veri türleri giriş veya çıkış parametreleri olarak. Karmaşık veri türleri desteklenir, çünkü XML çoğu veri türünü serileştirmeyi kolaylaştırır. Ancak, bir web hizmetini otomatik olarak test ederken ASP.NET, karmaşık veri türlerini kabul eden yöntemler için test sayfaları oluşturmaz. Bunun nedeni, HTTP GET ve POST kullanarak karmaşık veri türlerini web yöntemine geçirememenizdir.

Web servisleri kendi yöntemlerinizi çağırmanıza izin verir asenkron olarak. Zaman uyumsuz bir çağrı, web hizmetinin çağrıyı işlemesi ne kadar sürerse sürsün hemen geri döner. Zaman uyumsuz çağrılar, bir çağrının işlenmesi uzun zaman aldığında kullanışlıdır. Uygulama aramayı yapar, ardından aramanın sonucunu beklemeden çalışmaya devam eder ve daha sonra eşzamansız aramanın sonuçlarını alır. Sonuç, web yöntemi uygulama için uygun bir zamanda yeniden çağrıldığında veya web hizmeti tarafından çağrı işlemenin sona erdiğiyle ilgili bir bildirime abone olarak (temsilci mekanizması) elde edilir.

Web servisleri gibi araçlar kullanılarak oluşturulabilir. Microsoft Visual Studio 2005. Web hizmetleri oluşturmak için ayrı bir ASP .NET Web Hizmeti proje türü vardır. Visual Studio bir asmx dosyası, web hizmeti sınıflarını açıklamak için arka plan kodu içeren bir dosya, bir web hizmeti yapılandırma dosyası vb. oluşturur. Proje yürütülmek üzere başlatıldığında, hizmet sınıfları derlenir ve asmx dosyası bir tarayıcı penceresinde açılır.

Sözleşmeleri Kullanarak Web Servislerini Tanımlama

Diğer geliştiricilerin AdditionService'i kullanabilmeleri için, hangi yöntemleri ortaya koyduğunu, hangi protokolleri desteklediğini, yöntem imzalarını ve web hizmeti adresini (URL) bilmeleri gerekir. Tüm bunlar ve diğer bilgiler WSDL'de (Web Hizmeti Açıklama dili) açıklanabilir.


Web Hizmeti Keşfi

Diğer geliştiriciler AdditionService'in varlığını nasıl biliyor?

İlk olarak, DISCO'nun (kelime keşfinin kısaltması) yardımıyla - yerel web hizmetlerini aramak için bir dosya mekanizması, yani web sunucularında barındırılan DISCO dosyalarından mevcut web hizmetlerinin bir listesini elde etmek için bir mekanizma. Ayrıca, DISCO dosyaları, mevcut hizmetlerin WSDL sözleşmelerinin konumunun kayıtlarını içerir. DISCO dosyası, kayıtları olan bir XML dosyasıdır.

DISCO dosyalarına benzeyen VSDISCO dosyalarını kullanmak da mümkündür, ancak içerikleri, belirtilen dizinlerde ve tüm iç içe alt dizinlerde web hizmetleri için dinamik bir aramanın sonucudur. ASP .NET, .vsdisco dosya adı uzantısını, verilen dizini ve alt dizinlerini asmx ve disko için arayan ve dinamik olarak oluşturulmuş bir DISCO belgesi döndüren bir HTTP işleyicisine eşler. Güvenlik nedeniyle, .NET Framework'ün bazı sürümlerinde dinamik arama devre dışı bırakılmıştır, ancak bunu Machine.config dosyasındaki girişleri düzenleyerek etkinleştirebilirsiniz.

Ancak küresel ağda web servislerini aramak nasıl? Küresel ağda web hizmetlerini aramak için Microsoft, IBM ve Ariba ortaklaşa UDDI'yi (Evrensel Tanım Keşfi ve Entegrasyon) geliştirdi - web hizmetlerini bulmanızı sağlayan dağıtılmış veritabanları oluşturmaya yönelik bir özellik. UDDI yüzlerce şirket tarafından desteklenmektedir. UDDI sitelerinin kendileri web hizmetleridir. Herkes kayıt defterini UDDI'ye dayalı olarak yayınlayabilir. Çoğu geliştirici, UDDI API'sini hiçbir zaman doğrudan kullanmaz. Bunun yerine, UDDI kayıtlarına geliştirme araçları tarafından erişilir. Ayrıca keşfedilen ve seçilen web hizmetleri için sarmalayıcı sınıfları oluştururlar.

Sonuçlar

XML Web hizmeti, XML ve HTTP gibi standartları destekleyen çok çeşitli sistemler tarafından kullanılabilen işlevsellik sağlayan bir yazılım bileşenidir.Web hizmeti istemcileri hem yerel hem de uzak uygulamalar olabilir. Web hizmetleri, basit, yaygın olarak kabul edilen standartlara dayalı olarak farklı sistemleri entegre etmeyi kolaylaştıran yapılar oluşturmanıza olanak tanır.

Bugün, WEB hizmetleri hemen hemen her yerde kullanılıyor - bize uçak ve tren uçuşları, döviz kurları ve hava durumu hakkında bilgi veriyorlar. 1C'nin hem tedarikçi hem de tüketici olarak hareket etmenizi sağlayan kendi WEB hizmetlerini oluşturma yeteneğine sahip olması şaşırtıcı değildir. Bu mekanizma 1C:Enterprise 8.3 platformunda yerleşiktir ve geliştiriciler standart yapılandırmaya WEB hizmetleri türünden kendi nesnelerini bile ekleyebilir. Mimarileri, diğer yazılımlarla bilgi alışverişinde bulunmanıza izin veren bir dizi hizmet üzerine kuruludur.

Bir web servisinin oluşturulması 1C

1C WEB servislerinin ana avantajlarından biri, bilgi güvenliği verilerine doğrudan erişim verme ihtiyacının olmamasıdır. Düzgün yapılandırılmış 1C web hizmeti, diğer uygulamaların işlevleri dışarıdan kullanmasına izin verir. Bu gibi durumlarda, geliştirici tarafından belirtilen kurallara göre belirtilen parametrelere göre veri kullanım hakkını işlevin kendisi belirlemelidir.

1C'de bir web servisi nasıl oluşturulur?

1C sisteminin belirli bir işlevinin harici yazılım tarafından kullanılabilmesi için, aşağıdaki eylem algoritmasını gerçekleştirmelisiniz:

  1. Yapılandırmaya gidin ve ağacın belirli bir dalına bir WEB hizmet nesnesi ekleyin;
  2. İşlevselliğimizin gerçekleştirebileceği tüm işlemleri açıklayın. İşlevlerin açıklaması, yerleşik 1C dilinde modülde yapılır;
  3. Web hizmeti işlevlerinin parametrelerinin bir açıklamasını ekleyin. Lütfen veri türlerinin, 8.1 sürümü platformunda tanıtılan mevcut XDTO mekanizması türleri dikkate alınarak açıklandığını unutmayın;
  4. Oluşturulan WEB servisini sunucuda yayınlayın. 1C platformunda yerleşik mekanizma aşağıdaki standartları destekler:
  • SSL/TLS
  • WS-I BP

Basit bir WEB hizmeti oluşturma örneği

WEB hizmetleri mekanizmasının işleyişini en açık şekilde göstermek için, bir örnek oluşturalım - girilen dizenin uzunluğunu belirleyen bir işlev. Yazılım bir diziyi sorgu parametresi olarak iletir ve 1C'de açıklanan fonksiyon karakter sayısını döndürür. Oluştururken, bu mekanizmanın yayınlanmasının çeşitli yazılımların ona erişmesini mümkün kılacağını hatırlamanız gerekir. Her yazılım Kiril alfabesini algılayamadığından, yapılandırma nesnelerini Latin karakterlerini kullanarak adlandıracağız.

Konfigüratörü açın, ağaçta "WEB servisleri" dalını bulun ve yeni bir servis "wa_LengthString" ekleyin. Ayrıca "İşlemler" sekmesinde yeni bir işlem eklemeniz gerekiyor. Buna "CalcLengthString" diyelim, döndürülen değerin türünü - int veya tamsayı belirttiğimiz özelliklerde ve içinde bir "InputString" parametresi oluşturalım. Değer türünü dize olarak bırakın.


Şimdi CalcLengthString işlevinin eylemini WEB hizmet modülüne kaydetmek gerekiyor. Bunu yapmak için, oluşturulan fonksiyonun özelliklerini açın ve "Prosedür adı" giriş alanının yanında sağdaki büyüteç şeklindeki düğmeye basın. 1C, WEB servis modülümüzde otomatik olarak bir fonksiyon oluşturacak ve CalcLengthString eylemini tanımlayabilmemiz için onu açacaktır. Bundan yararlanalım ve giriş dizesinin uzunluğunu belirleyen işlevin eylemini yazalım.


Aslında bu, en basit WEB hizmetinin oluşturulmasını tamamlar. Şimdi, üçüncü taraf yazılımların veya diğer 1C sistemlerinin bu işlevi kullanabilmesi için bu hizmeti kamu alanına “koymanız” gerekiyor.

Oluşturulan web servisini işlevselliği ile yayınlayabilmemiz için siteye erişimimizin olması gerekir. Hizmeti yayınlamaya başlamadan önce, oluşturulan wa_LengthString modülünün özelliklerinde dosya adını kontrol etmemiz gerekiyor. Açık, basit olmalı ve "1cws" uzantısına sahip olmalıdır.


Şimdi sunucu üzerinde oluşturduğumuz WEB servisini yayınlama zamanı. Bu özellik, platformun 8.3 sürümünde ortaya çıktı ve birçok şirket bu işlevin tüm faydasını zaten fark etti. Yayınlamaya başlamak için, yapılandırıcıda “Yönetim/Web sunucusunda yayınlama…” formunu açmanız gerekir.


Açılan pencerede 1C Web servislerini kurmamız ve belirli alanları doldurmamız gerekiyor:

  • İsim. Web servisimizin açıklamasının saklanacağı web sunucusundaki bir klasörü belirtir. Sunucular bazen büyük harf ve küçük harf arasında ayrım yaptığından büyük/küçük harfe dikkat edin;
  • Web sunucusu. Bilgisayarda kurulu olanlardan bir sunucu seçmelisiniz;
  • Katalog. Bağlantıyı kurmak için web sunucusu verilerinin depolandığı klasörün yolunu seçmelisiniz. Yalnızca Latin harfleri kullanılır;
  • "Boole" türünün iki özelliği. İlki, web istemcisi aracılığıyla yapılandırmaya erişimi yapılandırmamız gerekirse bizim için yararlıdır. 1C hizmetini yayınlamak için ikinci bir işaret koymalısınız.

Sadece istenen WEB hizmetinin ilk sütunda bir onay kutusu olup olmadığını kontrol etmek için kalır ve "Yayınla" yı tıklayın.


Bu mekanizma henüz çok yeni olduğu için "Dosya işlemi yapılırken hata oluştu..." gibi bir hata ile karşılaşabilirsiniz. Bu durumda, "Yayınla" düğmesini tekrarlamanız yeterlidir. Çoğu durumda, bu yardımcı olur ve web hizmeti yayınının tamamlandığını belirten bir mesaj görürsünüz.

tr//ws/.1cws?wsdl

Böyle bir adres talebine yanıt olarak, tarayıcının XML dosyasının yapısını görüntülemesi gerekir. Boş bir sayfa, hata veya garip karakterler (kodlama sorunları) görürseniz, tüm adımları tekrar kontrol etmeniz gerekir. Sunucunun doğru şekilde kurulduğundan ve sunucuya erişiminizin olduğundan emin olmak da iyi bir fikirdir. 1C WEB hizmetinin başarılı bir şekilde yayınlanmasından sonra, üçüncü taraf uygulamalar onu kullanabilecektir.

Web hizmeti, İnternet (http) üzerinden diğer programlar tarafından erişilebilen bir programdır. Örneğin, HTML metni sağlayan bir işleviniz olduğunu varsayalım. Uygulamanın amacı, sonuçları görüntüleyen bir web tarayıcısıdır ve bir kişi bu metni sayfada kolayca okuyabilir.

Öte yandan, bir web hizmetinin hedef kitlesi, web hizmeti tarafından sunulan verileri tüketen diğer programlar veya diğer web hizmetleridir. Tipik olarak çıktı, diğer programların anlayabileceği standart bir dildedir. Yukarıdaki örneği ele alalım, bir web hizmeti metni XML biçiminde çıkarıyorsa, XML'i okuyabilen veya anlayabilen diğer web hizmetleri bu çıktıyı kullanabilir.

Bir web servisinin temel faydası, uygulamaların herhangi bir dilde yazılabilmesidir, ancak bir web servisi aracılığıyla birbirleriyle iletişim kurabilir ve iletişim kurabilirler. Farklı programlama dillerinde yazılmış ve farklı platformlarda çalışan yazılım uygulamaları, internet üzerinden veri alışverişi (HTTP) için web servislerini kullanabilir. Bu etkileşim (örneğin, Java ve Python veya Windows ve Linux uygulamaları arasında), açık standartların (XML, SOAP, HTTP) kullanımını içerir.

  • SOAP (Basit Nesne Erişim Protokolü)
  • UDDI (Evrensel Tanımlama, Keşif ve Entegrasyon)
  • WSDL (Web Hizmetleri Açıklama Dili)

Kaç çeşit web servisi vardır?

Öncelikle iki tür web servisi vardır, Basit Nesne Erişim Protokolü (SOAP) ve Temsili Durum Transferi (REST).

  • SOAP web hizmeti, bir XML isteğini kabul eder ve XML çıktısı oluşturur.
  • REST web hizmeti daha geneldir ve istek olarak XML'in yanı sıra JSON'u da kabul edebilir ve XML'de, JSON'da ve hatta HTML'de çıktı oluşturabilir

Bu konu bizimkilerde daha detaylı olarak incelenebilir.