2014-08-30 2 views
0

다음 방법을 사용하여 웹 서비스 클라이언트를 작성합니다. 다음과 같이 스텁 인스턴스를 생성 한 후 클라이언트와 서버 간의 연결이 성립되었는지 알 수 있습니다. 그렇지 않으면 클라이언트와 서버 사이의 연결은 원격 메소드 호출을 호출 한 후에 설립 등 myervicePort.xxxMetho()웹 서비스 클라이언트 작성 방법

RPC/Encoded 
stub = new MyWsRPCPortStub(new URL(), new MyWsRPCLocator()); 
stub.setTimeout(pdbTimeout); 

Document/Literal 
MyServicePort myervicePort = service.getMyServicePort(); 

내가 스텁 인스턴스가 생성 될시기를 결정하기 위하여려고하고 위의 질문을 학습 한 후, stub.xxxmethod()로? 나는 두 가지 방법이있을 것입니다 의미 :

1- 내가

2는 메서드 호출을 할 때마다 호출하기 전에 스텁 인스턴스를 생성 싱글 톤 패턴을 사용합니다 의미, 응용 프로그램에서 하나의 스텁 인스턴스를 생성

무엇 I는 다중 스레드 appiication 하나만 스터브 인스턴스를 사용하는 경우, 동시에 각 스레드 오픈 차분 소켓 동시에 T1->를 stub.xxMethod() T2-> 스터브에서 stub.xxMethod()

호출있다. xxMethod() T3-> stub.xxMethod()

답변

1

우선 클라이언트에서 웹 서비스를 사용하기 위해 언급 한 모든 사항은 웹 서비스 스타일이 RPC 또는 문서 리터럴에 의존하지 않습니다. 클라이언트는 두 스타일 모두 동일합니다. 이러한 스타일은 클라이언트와 서버간에 교환되는 SOAP 메시지의 구조를 결정합니다. 시작하기위한 게시물 : - here.

HTTP를 통해 실행되는 SOAP 프로토콜을 사용하여 클라이언트와 서버간에 메시지가 전송됩니다. 따라서 클라이언트와 서버 간의 통신은 기본 TCP 프로토콜의 작업 인 경우와 연결이 언제 어떻게 유지되고 유지되는지보다는 일반적인 HTTP 요청/응답 모델로 주로 간주되어야합니다. 웹 서비스 클라이언트의 API와 기본 OS는 이러한 세부 정보를 완전히 추상화합니다.

그러나 웹 서비스 클라이언트가 HTTP 요청을 한 시점을 알고 싶다면, 예를 들어 'wireshark'와 같은 패킷 캡처 도구를 사용하여 추적 할 수 있습니다. 일반적으로 한 가지 방법으로 웹 서비스가있는 경우, 일반적으로 Service service = Service.create(url, qname) API를 사용하고 HTTP POST를 YourWSInterface.xxxmethod()에 사용하면 HTTP GET 요청이 발생합니다.

스텁을 만드는시기; 다중 스레드 환경에서; 웹 스터브에 보내기 전에 클라이언트 스텁에서 BindingProvider를 사용하여 데이터를 설정하는 것입니다 (단순한 읽기 전용 호출이 아닌). 예; (단일 인스턴스로) 클라이언트 코드에서 일부 syhcnronization이 필요하거나 클라이언트 프록시 풀 (여러 풀링 된 인스턴스)을 만들 수 있습니다. 앱의 요구 사항에 따라 다릅니다.

나는이 질문에 답변했으면 좋겠다.

+0

마지막 두 문장으로 충분합니다. tnks. –

+0

도와 주시면 SO와 upvote에 감사드립니다! – Abhin

+0

여러 스레드가 동일한 스텁 인스턴스를 사용하는 경우 각 스레드가 다른 연결을 열 수 있습니까? –