WebService adalah teknologi panggilan jarak jauh yang melintasi bahasa pemrograman dan melintasi platform sistem operasi.
Panggilan jarak jauh yang disebut adalah metode di mana program di komputer A dapat memanggil objek di komputer lain b. Misalnya, sistem penggesek kartu POS yang disediakan oleh UnionPay ke mal (menggunakan pertanyaan interaktif untuk memperdalam pemahaman semua orang tentang teknologi ini).
Apa gunanya teknologi panggilan jarak jauh? Apakah kode metode transfer dipanggil untuk mesin POS di mal di server bank atau di mesin POS di mal? Dalam keadaan apa teknologi panggilan jarak jauh dapat digunakan? Misalnya, Amazon, Sistem Peramalan Cuaca, Taobao, Jaringan Kampus, Baidu, dll. Mengekspos layanan sistem mereka dalam bentuk layanan layanan web, yang memungkinkan situs web dan program pihak ketiga untuk memanggil fungsi layanan ini, yang memperluas pangsa pasar dari sistem mereka sendiri dan meledak ke konsep yang lebih besar, yang merupakan aplikasi SOA yang disebut.
Yang disebut platform bahasa silang dan platform lintas-operasi berarti bahwa program server ditulis di Java, sementara program klien dapat ditulis dalam bahasa pemrograman lainnya, dan sebaliknya! Platform sistem yang beroperasi silang berarti bahwa program server dan program klien dapat berjalan pada sistem operasi yang berbeda.
Selain layanan web, teknologi panggilan jarak jauh umum termasuk RMI (Remotemethodinvoke) dan CORBA. Karena cross-platform dan karakteristik bahasa silang dari layanan web, ini lebih banyak digunakan daripada dua teknologi lainnya, tetapi memiliki kinerja yang sedikit lebih rendah.
Langkah biasa saat menggunakan JDK untuk melakukan panggilan layanan web adalah sebagai berikut:
// 1. Buat instance javax.xml.ws.service javax.xml.ws.service Service = javax.xml.ws.service.create (wsdl, serviceName); // 2. Dapatkan proxy untuk antarmuka layanan yang sesuai melalui instance layanan HelloService HelloService = service.getport (portname, helloService.class); // 3. Hubungi metode layanan yang sesuai HelloService.sayhello ("elim")Pada langkah 1 di atas, saat membangun instance layanan, objek jenis delegasi layanan akan dibangun di dalam layanan untuk menetapkan delegasi atribut ke penahanan internal. Kemudian pada langkah kedua, delegasi akan digunakan untuk membuat objek proxy untuk antarmuka layanan, dan juga akan proksi antarmuka pengikat dan antarmuka yang dapat ditutup. Kemudian, ketika permintaan antarmuka sebenarnya dimulai pada langkah ketiga, permintaan HTTP akan dimulai secara internal. Ketika permintaan HTTP dimulai, parameter batas waktu akan diperoleh dari hasil getRequestContext () pengembalian BindingProvider, sesuai dengan com.sun.xml.internal.ws.connection.Timeout dan com.sun.internal.internal.ws.request.timeout Paramer dan com.sun.internal. Yang pertama adalah waktu batas waktu untuk membangun koneksi, dan yang terakhir adalah waktu batas waktu untuk mendapatkan respons permintaan, yaitu dalam milidetik. Jika batas waktu yang sesuai tidak ditentukan atau batas waktu yang ditentukan adalah 0, itu berarti bahwa batas waktu tidak akan pernah berakhir. Jadi untuk menentukan waktu batas waktu, kita dapat mulai dengan BindingProvider. Misalnya:
public class Client {public static void main(String[] args) throws Exception {String targetNamespace = "http://test.elim.com/ws";QName serviceName = new QName(targetNamespace, "helloService");QName portName = new QName(targetNamespace, "helloService");URL wsdl = new Url ("http: // localhost: 8888/hello"); // objek tipe servicedelegate akan dibuat secara internal untuk menetapkannya ke atribut delegateService service = service.create (WSDL, serviceName); HelloService HelloService = service.getport (portname, helloService.class); BindingProvider BindingProvider = (BindingProvider) HelloService; peta <String, Object> RequestContext = bindingProvider.getReTerContext (); requestContext.put ("com.sm.sm.sm.x. 1000); // Batas waktu untuk membangun koneksi adalah 10 detik requestContext.put ("com.sun.xml.internal.ws.request.timeout", 15 * 1000); // Tentukan batas waktu respons untuk permintaan menjadi 15 detik // saat memanggil metode antarmuka, permintaan HTTP akan dimulai secara internal. Ketika permintaan HTTP dimulai, parameter timeout akan diperoleh dari hasil pengembalian GetRequestContext (), // sesuai dengan com.sun.xml.internal.ws.connection.time dan com.sun.xml.Internal.ws.reest.ReQuest.Timing. // Yang pertama adalah batas waktu untuk membangun koneksi, dan yang terakhir adalah batas waktu untuk mendapatkan respons permintaan, dan unitnya adalah milidetik. Jika batas waktu yang sesuai tidak ditentukan atau batas waktu yang ditentukan adalah 0, itu berarti bahwa batas waktu tidak akan pernah berakhir. System.out.println (HelloService.sayhello ("elim"));}} Contoh lengkapnya adalah sebagai berikut:
Antarmuka Layanan:
@WebService (portName = "HelloService", ServiceName = "HelloService", TargetNeNespace = "http://test.elim.com/ws") HelloService {String Sayshello (nama string);}Implementasi Antarmuka Layanan:
@WebService(portName="helloService", serviceName="helloService", targetNamespace="http://test.elim.com/ws")public class HelloServiceImpl implements HelloService {private Random random = new Random();@Overridepublic String saysHello(String name) {try {TimeUnit.SECONDS.sleep(5 + acak.nextInt (21)); // tidur acak selama 5-25 detik} catch (interruptedException e) {e.printstacktrace ();} return "hello" + name;}}Kode Server:
server kelas publik {public static void main (string [] args) {endpoint.publish ("http: // localhost: 8888/hello", new helloServiceImpl ());}}Kode server yang disebutkan di atas tidur secara acak selama 5-25 detik, sedangkan batas waktu yang ditentukan oleh klien adalah 15 detik, jadi selama pengujian, Anda akan melihat bahwa kadang-kadang panggilan layanan akan habis dan kadang-kadang akan merespons secara normal.
Meringkaskan
Di atas adalah semua penjelasan terperinci dari kode timeout layanan web pemrograman Java, saya harap ini akan membantu semua orang. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!