WebServiceは、プログラミング言語を越えてオペレーティングシステムのプラットフォームを横断するリモートコールテクノロジーです。
いわゆるリモートコールは、コンピューターA上のプログラムが別のコンピューター上のオブジェクトを呼び出すことができる方法です。たとえば、MALLにUnionPayが提供するPOSカードスワイピングシステム(このテクノロジーに関するすべての人の理解を深めるためのインタラクティブな質問を使用して)。
リモートコールテクノロジーの使用は何ですか?転送メソッドのコードは、バンクサーバーのモールまたはモールのPOSマシンのPOSマシンに呼び出されますか?どのような状況では、リモートコールテクノロジーを使用できますか?たとえば、Amazon、気象予測システム、Taobao、Campus Network、Baiduなどは、Webサービスサービスの形でシステムサービスを公開し、サードパーティのWebサイトとプログラムがこれらのサービス機能を呼び出すことができます。
いわゆるクロスプログラミング言語とクロスオペレーションプラットフォームは、サーバープログラムがJavaで記述され、クライアントプログラムは他のプログラミング言語で記述できることを意味します。クロスオペレーティングシステムプラットフォームは、サーバープログラムとクライアントプログラムが異なるオペレーティングシステムで実行できることを意味します。
WebServiceに加えて、一般的なリモート呼び出しテクノロジーには、RMI(Remotemethodinvoke)およびCorbaが含まれます。 Webサービスのクロスプラットフォームとクロスプログラミングの言語特性により、他の2つのテクノロジーよりも広く使用されていますが、パフォーマンスはわずかに低くなっています。
JDKを使用してWebサービスコールを作成する場合の通常の手順は次のとおりです。
// 1。 javax.xml.ws.serviceインスタンスjavax.xml.ws.serviceサービス= javax.xml.ws.service.create(wsdl、serviceName); // 2を作成します。サービスインスタンスHelloServiceHelloService = service.getport(portname、helloservice.class); // 3を使用して、対応するサービスインターフェイスのプロキシを取得します。対応するサービス方法HelloService.sayhello( "Elim")に電話してください
上記のステップ1では、サービスインスタンスを構築する際に、サービスの代表団のオブジェクトがサービス内に構築され、属性デリゲートが内部ホールドに割り当てられます。次に、2番目のステップでは、デリゲートがサービスインターフェイスのプロキシオブジェクトを作成するために使用され、バインディングプロバイダーと閉鎖可能なインターフェイスもプロキシになります。次に、3番目のステップでインターフェイス要求が実際に開始されると、HTTP要求が内部で開始されます。 HTTP要求が開始されると、com.sun.xml.internal.ws.connection.timeoutおよびcom.sun.xml.internal.ws.request.ws.request.timeoutパラメーターに対応するBindingProviderのgetRequestContext()RETURNの結果から、タイムアウトパラメーターが取得されます。前者は接続を確立するためのタイムアウト時間であり、後者はリクエスト応答を取得するためのタイムアウト時間(ミリ秒)です。対応するタイムアウトが指定されていない場合、または指定されたタイムアウトが0の場合、タイムアウトが期限切れになることはありません。したがって、タイムアウト時間を指定するために、BindingProviderから始めることができます。例えば:
public class client {public static void main(string [] args)スロー例外{string targetnamespace = "http://test.elim.com/ws"; qname servicename = new qname(" helloservice "); qname portname = new qnames(egrate url( "http:// localhost:8888/hello"); // servicedelegateタイプのオブジェクトは、属性Delegateservice service = service.create(wsdl、servicename)に割り当てるために内部的に作成されます。 HelloService helloservice = service.getport(portname、helloservice.class); BindingProvider BindingProvider =(BindingProvider)HelloService; Map <String、RequestContext = BindingProvider.GetRequestContext(); RequestContext.put( " 1000); //接続を確立するためのタイムアウトは10秒ですrequestcontext.put( "com.sun.xml.ws.request.timeout"、15 * 1000); HTTP要求が開始されると、BindingProviderのgetRequestContext()の返された結果からタイムアウトパラメーターが取得されます。 //前者は接続を確立するためのタイムアウトであり、後者はリクエスト応答を取得するためのタイムアウトであり、ユニットはミリ秒です。対応するタイムアウトが指定されていない場合、または指定されたタイムアウトが0の場合、タイムアウトが期限切れになることはありません。 System.out.println(helloservice.sayhello( "elim"));}}完全な例は次のとおりです。
サービスインターフェイス:
@webservice(portname = "helloservice"、servicename = "helloservice"、targetnamespace = "http://test.elim.com/ws")public interface helloservice {string sayshello(string name);}サービスインターフェイスの実装:
@webservice(portname = "helloservice"、servicename = "helloservice"、targetnamespace = "http://test.elim.com/ws")public class helloserviceimplはhelloservice {private random = new random();@overridepublic string sayshello(sing name){try sling(5 + random.nextint(21)); // 5-25秒間のランダムスリープ} catch(arternedexception e){e.printstacktrace();} return "hello" + name;}}}サーバーコード:
public class server {public static void main(string [] args){endpoint.publish( "http:// localhost:8888/hello"、new helloserviceimpl();}}}上記のサーバーコードは5〜25秒間ランダムにスリープしますが、クライアントが指定するタイムアウトは15秒です。そのため、テスト中にサービスコールがタイムアウトし、通常は正常に応答する場合があります。
要約します
上記は、JavaプログラミングWebサービスタイムアウトコードの詳細な説明です。すべての人に役立つことを願っています。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!