WebService ist eine Remote -Call -Technologie, die Programmiersprachen und Betriebssystemplattformen überschreitet.
Der sogenannte Remote-Anruf ist eine Methode, bei der ein Programm auf einem Computer A ein Objekt auf einem anderen Computer aufrufen kann. B. Zum Beispiel das von UnionPay an das Einkaufszentrum bereitgestellte POS -Karten -Swiping -System (mit interaktiven Fragen, um das Verständnis dieser Technologie aller zu vertiefen).
Wie nutzt die Remote -Anruftechnologie? Ist der Code der Übertragungsmethode nach POS -Maschine im Einkaufszentrum auf dem Bankserver oder auf der POS -Maschine im Einkaufszentrum gefordert? Unter welchen Umständen kann Remote Calling -Technologie verwendet werden? Zum Beispiel werden Amazon, Wettervorhersagesystem, Taobao, Campus Network, Baidu usw. ihre Systemdienste in Form von WebService-Diensten enthüllen und Websites und Programmen von Drittanbietern ermöglichen, diese Servicefunktionen zu nennen, die den Marktanteil ihres eigenen Systems und die Schläge des größeren Konzepts erweitern, das sogenannte SOA-Anwendung ist.
Die sogenannte Cross-Programm-Sprache und die Kreuzungsplattform bedeutet, dass das Serverprogramm in Java geschrieben ist, während das Client-Programm in anderen Programmiersprachen geschrieben werden kann und umgekehrt! Eine Kreuzbetriebsplattform bedeutet, dass Serverprogramme und Client-Programme auf verschiedenen Betriebssystemen ausgeführt werden können.
Zu den gängigen Remote -Calling -Technologien gehören neben WebService RMI (Remotemethodinvoke) und CORBA. Aufgrund der plattformübergreifenden und querprogrammierenden Sprachmerkmale von WebService wird es häufiger verwendet als die beiden anderen Technologien, hat jedoch eine etwas geringere Leistung.
Die üblichen Schritte bei der Verwendung von JDK, um WebService -Anrufe zu tätigen, sind wie folgt:
// 1. Erstellen Sie eine javax.xml.ws.service -Instanz javax.xml.ws.service service = javax.xml.ws.service.create (WSDL, Servicename); // 2. Holen Sie sich den Proxy für die entsprechende Serviceschnittstelle über die Service Instance HelloService HelloService = service.getport (Portname, HelloService.class); // 3. Rufen Sie die entsprechende Servicemethode HelloService.sayhello ("Elim") an.In der obigen Schritt 1 wird beim Erstellen einer Serviceinstanz ein Objekt des Service -Delegierten -Typs im Dienst aufgebaut, um den Attribut -Delegierten dem internen Hold zuzuweisen. Im zweiten Schritt wird Delegate dann verwendet, um ein Proxy -Objekt für die Serviceschnittstelle zu erstellen und auch die Schnittstellen BindingProvider und Clodable Proxy. Wenn dann im dritten Schritt die Schnittstellenanforderung tatsächlich eingeleitet wird, wird eine HTTP -Anforderung intern eingeleitet. Wenn die HTTP -Anforderung initiiert wird, werden die Timeout -Parameter aus dem Ergebnis der GetRequestContext () -Rendite von BindingProvider erhalten, die der com.sun.xml.internal.ws.connection.timeout und Com.sun.xml.internal.ws.request.TimeOut -Parameter entspricht. Ersteres ist die Zeitüberschreitungszeit für die Herstellung der Verbindung, und letzteres ist die Zeitüberschreitungszeit für die Erlangung der Requestantwort in Millisekunden. Wenn das entsprechende Zeitlimit nicht angegeben ist oder das angegebene Zeitlimit 0 beträgt, bedeutet dies, dass das Timeout niemals abläuft. Um die Zeitüberschreitungszeit anzugeben, können wir mit BindingProvider beginnen. Zum Beispiel:
Public Class Client {public static void main (String [] args) löst eine Ausnahme aus {String targetNameSpace = "http://test.elim.com/ws";qname serviceName = new Qname (targetnamespace," HelloService "); URL ("http: // localhost: 8888/hello"); // Ein Objekt des Servicedelegate wird intern erstellt, um es dem Attribut -Delegatesservice Service = service.create zuzuweisen (WSDL, Servicename). HelloService HelloService = service.getport (portname, helloService.class); BindingProvider BindingProvider = (BindingProvider) HelloService; Karte <String, Objekt> RequestContext = BindingProvider.GetRequestContext (); RequestContext.put (Com.Sun.Xml.Internal.Internal.Internal.Internal.Internal.Internal.InNect "; Die Zeitüberschreitung für die Erstellung einer Verbindung beträgt 10 Sekunden RequestContext.put ("com.sun.xml.internal.ws.Request.Timeout", 15 * 1000); // Geben Sie die Antwort -Timeout an, damit die Anforderung 15 Sekunden beträgt // beim Aufrufen der Schnittstellenmethode wird eine HTTP -Anforderung initiiert. Wenn eine HTTP -Anforderung initiiert wird, werden die Timeout -Parameter aus dem Ergebnis der Rückgabe der GetRequestContext () des BindingProviders erhalten, die dem com.sun.xml.internal.ws.connection.timeout und com.sun.xml.internal.ws.ws.Request.TheStimeout -Parameter entspricht. // Ersteres ist die Zeitüberschreitung für die Herstellung einer Verbindung, und letzteres ist die Zeitüberschreitung für die Erlangung der Anfrageantwort, und das Gerät ist Millisekunden. Wenn das entsprechende Zeitlimit nicht angegeben ist oder das angegebene Zeitlimit 0 beträgt, bedeutet dies, dass das Timeout niemals abläuft. System.out.println (HelloService.sayhello ("elim");}} Das vollständige Beispiel lautet wie folgt:
Serviceschnittstelle:
@Webservice (portname = "helloService", serviceName = "helloService", targetnamespace = "http://test.elim.com/ws") öffentliche Schnittstelle HelloService {String Sayshello (String -Name);}Implementierung der Serviceschnittstelle:
@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 + random.nextint (21)); // zufälliger Schlaf für 5-25 Sekunden} catch (InterruptedException e) {e.printstacktrace ();} return "hello" + name;}}Servercode:
öffentlicher Klasse Server {public static void main (String [] args) {Endpoint.Publish ("http: // localhost: 8888/hello", neuer HelloServiceImpl ());}}Der oben erwähnte Servercode schläft zufällig 5-25 Sekunden lang, während das vom Client angegebene Zeitüberschreitungszeitlimit 15 Sekunden beträgt. Während des Tests wird der Service-Anruf manchmal ein Zeitverlangen und manchmal reagieren er normal.
Zusammenfassen
Das obige ist die detaillierte Erklärung des Java -Programmier -Webservice -Timeout -Codes. Ich hoffe, er wird für alle hilfreich sein. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!