O WebService é uma tecnologia de chamada remota que atravessa linguagens de programação e cruza plataformas de sistemas operacionais.
A chamada chamada remota é um método no qual um programa em um computador A pode chamar um objeto em outro computador b. Por exemplo, o sistema de deslocamento de cartões POS fornecido pelo UnionPay ao shopping (usando perguntas interativas para aprofundar a compreensão de todos sobre essa tecnologia).
Qual é a utilidade da tecnologia de chamada remota? O código do método de transferência é chamado para a máquina POS no shopping no servidor bancário ou na máquina POS no shopping? Em que circunstâncias a tecnologia de chamada remota pode ser usada? Por exemplo, Amazon, sistema de previsão do tempo, Taobao, Campus Network, Baidu, etc. Expor seus serviços de sistema na forma de serviços de serviço da web, permitindo que sites e programas de terceiros chamam essas funções de serviço, que expandem a participação de mercado de seu próprio sistema e golpes para o conceito maior, que é a aplicação de SOA.
A chamada linguagem de programação cruzada e plataforma de operação cruzada significa que o programa de servidor está escrito em Java, enquanto o programa do cliente pode ser escrito em outras linguagens de programação e vice-versa! Uma plataforma de sistema de operação cruzada significa que os programas de servidor e os programas de clientes podem ser executados em diferentes sistemas operacionais.
Além do serviço da web, as tecnologias de chamada remota comuns incluem RMI (remotemethodinvoke) e corba. Devido às características da linguagem de plataforma cruzada e de programação cruzada do serviço da web, é mais amplamente utilizado que as outras duas tecnologias, mas tem um desempenho ligeiramente menor.
As etapas usuais ao usar o JDK para fazer chamadas de serviço da web são as seguintes:
// 1. Crie uma instância de javax.xml.ws.service javax.xml.ws.service Service = javax.xml.ws.service.create (wsdl, serviceName); // 2. Obtenha o proxy para a interface de serviço correspondente através da instância do serviço Helloservice Helloservice = Service.getport (PortName, Helloservice.class); // 3. Chame o método de serviço correspondente Helloservice.Sayhello ("Elim")Na etapa 1 acima, ao criar uma instância de serviço, um tipo de delegado de serviço será criado dentro do serviço para atribuir o delegado de atributo à retenção interna. Em seguida, na segunda etapa, o Delegate será usado para criar um objeto proxy para a interface de serviço e também procurará o BindingProvider e as interfaces fechadas. Então, quando a solicitação de interface for realmente iniciada na terceira etapa, uma solicitação HTTP será iniciada internamente. Quando a solicitação HTTP for iniciada, os parâmetros de tempo limite serão obtidos com o resultado do retorno getRequestContext () do BindingProvider, correspondendo ao com.sun.xml.internal.ws.connection.timeout e com.sun.xml.intern.ws.ws.reterMet.TimeOuts e com.sun.xml.intern.ws.ws.refort.timeoutters. O primeiro é o tempo limite para estabelecer a conexão, e o último é o tempo de tempo limite para obter a resposta da solicitação, que está em milissegundos. Se o tempo limite correspondente não for especificado ou o tempo limite especificado for 0, isso significa que o tempo limite nunca expirará. Portanto, para especificar o tempo de tempo limite, podemos começar com o BindingProvider. por exemplo:
public class Client {public static void main (string [] args) lança Exceção {String TargetNamespace = "http://test.elim.com/ws";qname serviceName = new QNAME (TargetNamespace," Helloservice "); QName PortName = QNAME (TargetNamespace," Helloserice "); Url ("http: // localhost: 8888/hello"); // Um objeto do tipo ServetedElegate será criado internamente para atribuí -lo ao atributo delegateService Service = Service.create (WSDL, o nome da interface de serviço); // ele usará o Deleg para criar um objeto de proxy para a interface de serviço, e ele também provará Helloservice helloservice = service.getport (portName, helloservice.class); bindingprovider bindingprovider = (bindingProvider) heloservice; map <string, object> requestContext = bindingProvider.GetRequestContext (); requestContext.put ("com.sun.xml.xml.inal.inal.inal.inal.inal.inal.inal.inal.inal.inal.inaln.inaln.Iml.inaln.InMl.inal.inaln.Iml.inalning); O tempo limite para o estabelecimento de uma conexão é de 10 segundos requestContext.put ("com.sun.xml.internal.ws.request.timeout", 15 * 1000); // Especifique o tempo limite da resposta para que a solicitação seja de 15 segundos // ao chamar o método da interface, uma solicitação HTTP será iniciada internamente. Quando uma solicitação HTTP for iniciada, os parâmetros de tempo limite serão obtidos com o resultado do retorno do getRequestContext do BindingProvider (), // correspondente ao com.sun.xml.internal.ws.connection.timeout e com.sun.xml.internal.ws.west.contection.timeout e com.sun.xml.internal.ws.west.west.west.west.west.timetersin-terterinlyer). // O primeiro é o tempo limite para estabelecer uma conexão, e o último é o tempo limite para obter a resposta da solicitação, e a unidade é milissegundos. Se o tempo limite correspondente não for especificado ou o tempo limite especificado for 0, isso significa que o tempo limite nunca expirará. System.out.println (helloservice.sayhello ("elim"));}} O exemplo completo é o seguinte:
Interface de serviço:
@WebService (PortName = "Helloservice", ServiceName = "Helloservice", TargetNamesPace = "http://test.elim.com/ws") interface pública Helloservice {String dizhello (nome da string);}Implementação da interface de serviço:
@WebService (PortName = "Helloservice", ServiceName = "Helloservice", TargetNamespace = "http://test.elim.com/ws") public classe HelloserviceImpl implementa Heloservice {private Random = novo Random ();@timeUrnidePublic String.TeLlo (Nome) {private Random = Random = Random ()@TimeIridePublic StringS.LoHello (Nome) {private Random = Random = Random (); Random.NextInt (21)); // Sono aleatório por 5-25 segundos} Catch (interruptedException e) {e.printStackTrace ();} retorna "hello" + name;}}Código do servidor:
public class Server {public static void main (string [] args) {endpoint.publish ("http: // localhost: 8888/hello", new helloserviceImpl ());}}}O código do servidor mencionado acima acomoda aleatoriamente por 5-25 segundos, enquanto o tempo limite especificado pelo cliente é de 15 segundos; portanto, durante o teste, você verá que às vezes a chamada de serviço será interrompida e às vezes responde normalmente.
Resumir
O exposto acima é toda a explicação detalhada do código de tempo limite do Java Programming Service, espero que seja útil para todos. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!