2011-12-20 2 views
0

웹 서비스에 대한 여러 클라이언트 동시 액세스를 허용하고 클라이언트가 요청을하도록 허용하고 데이터를 사용할 수있을 때까지 차단합니다. gsoap이 알림을 지원하지 않기 때문에 이렇게합니다.gsoap을 사용하는 여러 동시 클라이언트

내 webservice 클래스는 WITH_PURE_VIRTAL로 컴파일됩니다. 즉, 추상 클래스이므로 인스턴스를 만들 수 없습니다. 따라서 저는 webservice 클래스를 상속받은 저에 의해 만들어진 하나의 클래스를 사용하고 webservice 및 webclient 요청을 관리합니다.

그러나 내 클래스가 기존 클라이언트를 처리하는 중일 때 다른 요청을받을 수 없습니다.

본인은이 비슷한으로 스레드를 실행한다 (here) : 나는하지 않습니다 전화 서비스를 제공하는 대신 내 웹 서비스 클래스를 호출하는 코드를 수정할 때, 그러나

soap_serve((struct soap*)soap); 
    soap_destroy((struct soap*)soap); // dealloc C++ data 
    soap_end((struct soap*)soap); // dealloc data and clean up 
    soap_done((struct soap*)soap); // detach soap struct 
    free(soap); 

아무것도.

또한 웹 서비스 호출 메서드 내에서 새 스레드를 시작하려고했지만 스레드가 시작되자 마자 웹 클라이언트는 빈 응답을받습니다.

누구에게 의견이 있습니까?

답변

1

내 대답을 this 질문으로 보면 매우 기본적인 C++ 스레드 gSoap 서버를 볼 수 있습니다. 제가 생각하기에 서비스 클래스를 복사해야 할 필요가 있다는 것입니다. 내 코드에서 tc = c.copy() ; // make a safe copy 줄은 gSoap 컨텍스트를 포함하는 gSoap 서비스 인스턴스를 복사합니다. 주 스레드가 다른 요청을 기다리는 동안 새 스레드가 요청에 응답 할 수 있도록이 복사본이 새 스레드로 전달됩니다.

+0

정답입니다. 방금 추상 복사 방법을 구현해야했기 때문에 여러 클라이언트를 처리 할 수있었습니다. 의견을 보내 주셔서 감사합니다! – Daniel