Webservice는 프로그래밍 언어를 넘어 운영 체제 플랫폼을 교차하는 원격 통화 기술입니다.
소위 원격 통화는 컴퓨터 A의 프로그램이 다른 컴퓨터의 객체를 호출 할 수있는 방법입니다. b. 예를 들어, UnionPay가 쇼핑몰에 제공 한 POS 카드 스 와이프 시스템 (대화식 질문을 사용 하여이 기술에 대한 모든 사람의 이해를 심화시킵니다).
원격 통화 기술의 사용은 무엇입니까? 전송 방법의 코드는 은행 서버의 쇼핑몰 또는 쇼핑몰의 POS 기계에 POS 기계를 요구합니까? 어떤 상황에서 원격 통화 기술을 사용할 수 있습니까? 예를 들어, 아마존, 일기 예보 시스템, 타오 바오, 캠퍼스 네트워크, 바이두 등. 웹 서비스 서비스 형태로 시스템 서비스를 노출시켜 타사 웹 사이트 및 프로그램이 이러한 서비스 기능을 호출 할 수 있도록하여 자체 시스템의 시장 점유율을 확장하고 더 큰 개념으로 불이냅니다.
소위 교차 프로그래밍 언어 및 교차 수용 플랫폼은 서버 프로그램이 Java로 작성되었으며 클라이언트 프로그램은 다른 프로그래밍 언어로 작성 될 수 있으며 그 반대도 마찬가지입니다! 교차 수술 시스템 플랫폼은 서버 프로그램 및 클라이언트 프로그램이 다른 운영 체제에서 실행될 수 있음을 의미합니다.
WebService 외에도 일반적인 원격 통화 기술에는 RMI (RemotemethodinVoke) 및 Corba가 포함됩니다. 웹 서비스의 크로스 플랫폼 및 교차 프로그래밍 언어 특성으로 인해 다른 두 기술보다 널리 사용되지만 성능이 약간 낮습니다.
JDK를 사용하여 웹 서비스 호출을 할 때 일반적인 단계는 다음과 같습니다.
// 1. javax.xml.ws.service instance javax.xml.xml.ws.service service = javax.xml.ws.service.create (wsdl, serviceName); // 2를 만듭니다. 서비스 인스턴스 HelloService HelloService = service.getport (PortName, helloService.class); // 3을 통해 해당 서비스 인터페이스의 프록시를 가져옵니다. 해당 서비스 방법 HelloService.sayhello ( "enm")에 전화하십시오.
위의 1 단계에서 서비스 인스턴스를 구축하는 동안 서비스 대의원 유형이 서비스 내부에 구축되어 속성 대의원을 내부 홀드에 할당합니다. 그런 다음 두 번째 단계에서는 Delegate가 서비스 인터페이스의 프록시 객체를 작성하는 데 사용되며 BindingProvider 및 Closable Interfaces를 프록시합니다. 그런 다음 인터페이스 요청이 실제로 세 번째 단계에서 시작되면 HTTP 요청이 내부적으로 시작됩니다. HTTP 요청이 시작되면, 타임 아웃 매개 변수는 getRequestContext () BindingProvider의 return of bindingprovider의 결과에서 얻을 수 있습니다. 전자는 연결을 설정하기위한 시간 초과 시간이고, 후자는 밀리 초인 요청 응답을 얻는 시간 초과 시간입니다. 해당 시간 초과가 지정되지 않았거나 지정된 시간 초과가 0 인 경우 시간 초과가 만료되지 않음을 의미합니다. 따라서 타임 아웃 시간을 지정하기 위해 BindingProvider로 시작할 수 있습니다. 예를 들어:
public class client {public static void main (string [] args)은 예외 {string targetnamespace = "http://test.elim.com/w"; qname serviceName = new qname (targetnamespace,"helloService "); qname = new qname (helloService,"helloService "); URL ( "http : // localhost : 8888/hello"); // serviceedelegate 객체는 내부적으로 생성되어 속성 delegateservice service = service.create (wsdl, serviceName)에 할당됩니다. // 서비스 인터페이스를위한 프록시 객체를 생성하기 위해 Delegate를 사용하여 구속력을 발휘할 것입니다. HelloService helloService = service.getport (portName, helloService.class); bindingProvider bindingProvider = (bindingProvider) helloService; map <string, object> requestContext = bindingProvider.getRequestContext (); requestContext.put ( "com.sun.xml.internal.ws.connection."; 연결을 설정하기위한 시간 초과는 10 초의 requestContext.put ( "com.sun.xml.internal.ws.request.timeout", 15 * 1000); // 15 초가되도록 응답 시간 초과를 지정하면 인터페이스 메소드를 호출 할 때 HTTP 요청이 내부적으로 시작됩니다. HTTP 요청이 시작되면 BindingProvider의 getRequestContext ()의 반환 결과에서 시간 초과 매개 변수를 얻을 수 있습니다. // com.sun.xml.internal.ws.connection.timeout에 해당하는 // // 전자는 연결을 설정하기위한 시간 초과이고 후자는 요청 응답을 얻기위한 시간 초과이며 장치는 밀리 초입니다. 해당 시간 초과가 지정되지 않았거나 지정된 시간 초과가 0 인 경우 시간 초과가 만료되지 않음을 의미합니다. System.out.println (helloservice.sayhello ( "emin"));}} 완전한 예는 다음과 같습니다.
서비스 인터페이스 :
@webservice (portname = "helloService", serviceName = "helloService", targetnamespace = "http://test.elim.com/ws") public interface helloService {String sayhello (문자열 이름);}서비스 인터페이스 구현 :
@webservice (portname = "helloService", serviceName = "helloService", targetnamespace = "http://test.elim.com/ws") 공개 클래스 helloServiceimpl은 helloService {private random = new random ();@attratepublic string (@attratepublic string) {timeUnit.second.second.second. random.nextint (21)); // 5-25 초 동안 랜덤 수면} catch (InterruptedException e) {e.printstacktrace ();} return "hello" + name;}}서버 코드 :
공개 클래스 서버 {public static void main (String [] args) {endpoint.publish ( "http : // localhost : 8888/hello", new HelloServiceImpl ());}}위에서 언급 한 서버 코드는 5-25 초 동안 무작위로 잠을 자지 만 클라이언트가 지정한 시간 초과는 15 초이므로 테스트 중에는 서비스 호출이 시간이 소요되고 때로는 정상적으로 응답 할 수 있습니다.
요약
위의 내용은 Java 프로그래밍 웹 서비스 타임 아웃 코드에 대한 자세한 설명입니다. 모든 사람에게 도움이되기를 바랍니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!