Webservice เป็นเทคโนโลยีการโทรระยะไกลที่ข้ามภาษาการเขียนโปรแกรมและข้ามแพลตฟอร์มระบบปฏิบัติการ
การโทรระยะไกลที่เรียกว่าเป็นวิธีที่โปรแกรมในคอมพิวเตอร์ A สามารถโทรหาวัตถุบนคอมพิวเตอร์เครื่องอื่น b ตัวอย่างเช่นระบบการกวาดบัตร POS ที่จัดทำโดย UnionPay ไปยังห้างสรรพสินค้า (ใช้คำถามแบบโต้ตอบเพื่อให้ทุกคนเข้าใจเทคโนโลยีนี้ลึกซึ้งยิ่งขึ้น)
การใช้เทคโนโลยีการโทรระยะไกลคืออะไร? รหัสของวิธีการถ่ายโอนเรียกว่าเครื่อง POS ในห้างสรรพสินค้าบนเซิร์ฟเวอร์ธนาคารหรือบนเครื่อง POS ในห้างสรรพสินค้าหรือไม่? ในสถานการณ์ใดที่สามารถใช้เทคโนโลยีการโทรจากระยะไกลได้? ตัวอย่างเช่น Amazon, ระบบพยากรณ์อากาศ, Taobao, เครือข่ายวิทยาเขต, Baidu ฯลฯ เปิดเผยบริการระบบของพวกเขาในรูปแบบของบริการ Webservice ช่วยให้เว็บไซต์ของบุคคลที่สามและโปรแกรมเรียกฟังก์ชั่นบริการเหล่านี้ซึ่งขยายส่วนแบ่งการตลาดของระบบของตนเอง
ภาษาที่เรียกว่าการเขียนโปรแกรมข้ามโปรแกรมและแพลตฟอร์มข้ามการดำเนินการหมายความว่าโปรแกรมเซิร์ฟเวอร์ถูกเขียนใน Java ในขณะที่โปรแกรมไคลเอนต์สามารถเขียนในภาษาการเขียนโปรแกรมอื่น ๆ และในทางกลับกัน! แพลตฟอร์มระบบข้ามการดำเนินงานหมายความว่าโปรแกรมเซิร์ฟเวอร์และโปรแกรมไคลเอนต์สามารถทำงานบนระบบปฏิบัติการที่แตกต่างกัน
นอกเหนือจาก Webservice แล้วเทคโนโลยีการโทรระยะไกลทั่วไปยังรวมถึง RMI (Remotemethodinvoke) และ Corba เนื่องจากลักษณะภาษาข้ามแพลตฟอร์มและการเขียนโปรแกรมข้ามโปรแกรมของเว็บเซิร์ฟเวอร์จึงมีการใช้กันอย่างแพร่หลายมากกว่าอีกสองเทคโนโลยี แต่มีประสิทธิภาพต่ำกว่าเล็กน้อย
ขั้นตอนปกติเมื่อใช้ JDK ในการโทรแบบเว็บเซิร์ฟเวอร์มีดังนี้:
// 1. สร้างอินสแตนซ์ javax.xml.ws.service javax.xml.ws.service บริการ = javax.xml.ws.service.create (wsdl, servicename); // 2 รับพร็อกซีสำหรับอินเทอร์เฟซบริการที่สอดคล้องกันผ่านอินสแตนซ์บริการ HelloService HelloService = Service.getPort (PortName, HelloService.class); // 3 โทรหาวิธีการบริการที่สอดคล้องกัน HelloService.sayhello ("Elim")ในขั้นตอนที่ 1 ข้างต้นในขณะที่สร้างอินสแตนซ์บริการวัตถุประเภทตัวแทนบริการจะถูกสร้างขึ้นภายในบริการเพื่อกำหนดตัวแทนแอตทริบิวต์ให้กับการระงับภายใน จากนั้นในขั้นตอนที่สองมอบหมายให้สร้างวัตถุพร็อกซีสำหรับอินเทอร์เฟซบริการและจะพร็อกซี bindingProvider และอินเทอร์เฟซที่ปิดได้ จากนั้นเมื่อคำขออินเทอร์เฟซเริ่มต้นจริงในขั้นตอนที่สามคำขอ HTTP จะเริ่มต้นภายใน เมื่อมีการเริ่มต้นคำขอ HTTP พารามิเตอร์การหมดเวลาจะได้รับจากผลลัพธ์ของการกลับมาของ BindingProvider ที่สอดคล้องกับ com.sun.xml.internal.ws.connection.timeout และ com.sun.xml.internal.ws.ws. อดีตคือเวลาหมดเวลาสำหรับการสร้างการเชื่อมต่อและหลังคือเวลาหมดเวลาสำหรับการได้รับการตอบสนองการร้องขอซึ่งอยู่ในมิลลิวินาที หากไม่ได้ระบุการหมดเวลาที่สอดคล้องกันหรือการหมดเวลาที่ระบุคือ 0 หมายความว่าการหมดเวลาจะไม่หมดอายุ ดังนั้นเพื่อระบุเวลาหมดเวลาเราสามารถเริ่มต้นด้วย BindingProvider ตัวอย่างเช่น:
ไคลเอนต์คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {สตริง targetNamespace = "http://test.elim.com/ws"; URL ("http: // localhost: 8888/hello"); // วัตถุประเภท serviceDelegate จะถูกสร้างขึ้นภายในเพื่อกำหนดให้กับคุณลักษณะที่ได้รับมอบหมายบริการ = service.create (wsdl, servicename); // มันจะใช้ตัวแทน HelloService helloService = service.getPort (portname, helloService.class); bindingProvider bindingProvider = (bindingProvider) helloService; แผนที่ <สตริง, วัตถุ> requestcontext = bindingProvider.getRequestContext () การสร้างการเชื่อมต่อคือ 10 วินาที requestcontext.put ("com.sun.xml.internal.ws.request.timeout", 15 * 1000); // ระบุการหมดเวลาตอบสนองสำหรับการร้องขอเป็น 15 วินาที // เมื่อเรียกใช้วิธีการอินเตอร์เฟสคำขอ HTTP จะเริ่มต้นภายใน เมื่อมีการร้องขอ HTTP พารามิเตอร์การหมดเวลาจะได้รับจากผลลัพธ์ของการกลับมาของ GetRequestContext () ของ BindingProvider (), // สอดคล้องกับ com.sun.xml.internal.ws.connection.timeout และ com.sun.xml.internal.ws. // อดีตคือหมดเวลาสำหรับการสร้างการเชื่อมต่อและหลังคือการหมดเวลาสำหรับการได้รับการตอบสนองการร้องขอและหน่วยเป็นมิลลิวินาที หากไม่ได้ระบุการหมดเวลาที่สอดคล้องกันหรือการหมดเวลาที่ระบุคือ 0 หมายความว่าการหมดเวลาจะไม่หมดอายุ System.out.println (HelloService.sayhello ("Elim")));}} ตัวอย่างที่สมบูรณ์มีดังนี้:
อินเทอร์เฟซบริการ:
@WebService (portName = "helloService", serviceName = "helloService", targetNamespace = "http://test.elim.com/ws") อินเตอร์เฟสสาธารณะ
การใช้งานส่วนต่อประสานบริการ:
@webservice (portname = "helloService", servicename = "helloService", targetNamespace = "http://test.elim.com/ws") ชั้นเรียนสาธารณะ random.nextint (21)); // sleep แบบสุ่มเป็นเวลา 5-25 วินาที} catch (interruptedException e) {e.printstacktrace ();} return "hello" + name;}}}รหัสเซิร์ฟเวอร์:
เซิร์ฟเวอร์ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {endpoint.publish ("http: // localhost: 8888/hello", HelloServiceimpl ใหม่ ());}}รหัสเซิร์ฟเวอร์ที่กล่าวถึงข้างต้นนอนแบบสุ่มเป็นเวลา 5-25 วินาทีในขณะที่การหมดเวลาที่ระบุโดยไคลเอนต์คือ 15 วินาทีดังนั้นในระหว่างการทดสอบคุณจะเห็นว่าบางครั้งการโทรบริการจะหมดเวลาและบางครั้งมันจะตอบสนองตามปกติ
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของรหัสการหมดเวลาการเขียนโปรแกรม Java Webservice ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!