Webservice - это технология удаленного вызова, которая пересекает языки программирования и пересекает платформы операционной системы.
Так называемый удаленный вызов-это метод, в котором программа на компьютере может вызвать объект на другом компьютере b. Например, система проводки POS -карты, предоставленная UnionPay для торгового центра (используя интерактивные вопросы, чтобы углубить понимание каждого технологии).
Каково использование технологии удаленного вызова? Призывается ли код метода передачи призывается к POS -машине в торговом центре на банковском сервере или на POS -машине в торговом центре? При каких обстоятельствах можно использовать технологию удаленного вызова? Например, Amazon, система прогнозирования погоды, Taobao, Campus Network, Baidu и т. Д. Раскрывает свои системные услуги в виде услуг веб-сервиса, позволяя сторонним веб-сайтам и программам вызывать эти услуги, которые расширяют долю рынка собственной системы и удары в более широкую концепцию, которая является так называемым приложением SOA.
Так называемый язык межпрограммирования и платформа перекрестного операции означает, что серверная программа написана на Java, в то время как клиентская программа может быть написана на других языках программирования и наоборот! Платформа по перекрестной операции означает, что серверные программы и клиентские программы могут работать в различных операционных системах.
В дополнение к веб -сервису, общие технологии удаленного вызова включают RMI (Remotemethodinvoke) и Corba. Из-за кроссплатформенного и перекрестного языка языков веб-сервиса он используется более широко, чем две другие технологии, но обладает немного более низкой производительностью.
Обычные шаги при использовании JDK для звонков для веб -сервиса следующие:
// 1. Создайте javax.xml.ws.service экземпляр javax.xml.ws.service service = javax.xml.ws.service.create (wsdl, serviceName); // 2. Получить прокси для соответствующего интерфейса обслуживания через экземпляр службы helloService helloService = service.getport (portname, helloservice.class); // 3. Вызовите соответствующий метод обслуживания helloservice.sayhello ("elm")На вышеуказанном шаге 1, построив экземпляр сервиса, объект типа сервисного делегата будет построен внутри службы, чтобы назначить делегат атрибута на внутреннее удержание. Затем на втором этапе делегат будет использоваться для создания прокси -объекта для интерфейса сервиса, а также будет прокси -концом интерфейса BindingProvider и ближайшие интерфейсы. Затем, когда запрос интерфейса фактически инициирован на третьем этапе, HTTP -запрос будет инициирован внутри. Когда HTTP -запрос инициирован, параметры тайм -аута будут получены из результата возврата getRequestContext () BindingProvider, что соответствует Com.sun.xml.internal.ws.connection.Timeout и com.sun.xml.internal.ws.request.timeout. Первый - это время для установления времени для установления соединения, а последнее - время ожидания для получения ответа на запрос, который находится в миллисекундах. Если соответствующий тайм -аут не указан или указанный тайм -аут равен 0, это означает, что тайм -аут никогда не истекает. Таким образом, чтобы указать время ожидания, мы можем начать с BindingProvider. например:
Public Class Client {public static void main (string [] args) бросает исключение {string targetnamespace = "http://test.elim.com/ws"; qname serviceName = new Qname (TargetNamespace," HelloService "); qname portname = new Qname (TargetNamespace, HelloService"); URL ("http: // localhost: 8888/hello"); // объект типа обслуживания будет создан внутри, чтобы назначить его атрибуту Delegateservice service = service.create (wsdl, ServiceName); // Он будет использовать делегат для создания объекта Proxy для интерфейса сервиса, и он также будет обеспечивать inbdingprovaces и structive. HelloService helloService = service.getport (portname, helloservice.class); bindingprovider bindingprovider = (bindingprovider) HelloService; Map <String, Object> requestContext = bindingProvider.getRequestContext (); requestContext.put ("com.sun.xml.Internal.ws.conection.time. Установление соединения составляет 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.request.timeout. // Первый является тайм -аутом для установления соединения, а последний - время ожидания для получения ответа на запрос, а устройство составляет миллисекунды. Если соответствующий тайм -аут не указан или указанный тайм -аут равен 0, это означает, что тайм -аут никогда не истекает. System.out.println (helloService.sayhello ("rem"));}} Полный пример заключается в следующем:
Интерфейс сервиса:
@Webservice (portname = "helloService", serviceName = "helloService", targetNamespace = "http://test.elim.com/ws") Общедоступный интерфейс HelloService {String Sayshello (String name);}Реализация интерфейса услуг:
@Webservice (portname = "helloService", serviceName = "helloService", targetNamespace = "http://test.elim.com/ws") открытый класс Helloserviceimpl реализует HelloService {private random = new random ();@overpublic string sayshello (String name) {trouge {timeUnit.sonds. random.nextint (21)); // Случайный сон в течение 5-25 секунд} Catch (прерывание Exception e) {e.printstacktrace ();} return "hello" + name;}}Код сервера:
Общественный сервер класса {public static void main (string [] args) {endpoint.publish ("http: // localhost: 8888/hello", new helloserviceimpl ());}}Код сервера, упомянутый выше, случайно спит в течение 5-25 секунд, в то время как тайм-аут, указанный клиентом, составляет 15 секунд, поэтому во время теста вы увидите, что иногда сервисный вызов будет время от времени, а иногда он отвечает нормально.
Суммировать
Выше приведено все подробное объяснение кода тайм -аута веб -сервиса Java, я надеюсь, что это будет полезно для всех. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!