使用gsoap的多个同时客户端

时间:2011-12-20 20:19:34

标签: c++ web-services gsoap

我尝试启用多个同时客户端访问Web服务,让客户端发出请求并阻止数据可用(我这样做是因为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); 

但是,当我修改该代码来调用我的webservice类时,服务调用并没有做任何事情。

我还尝试在我的webservice调用方法中启动一个新线程,但是一旦线程启动,webclient就会收到一个空响应。

有人有任何建议吗?

1 个答案:

答案 0 :(得分:1)

如果你查看我对this问题的回答,你可以看到一个非常基本的C ++线程gSoap服务器。我认为您可能缺少的是需要复制服务类,在我的代码中,行tc = c.copy() ; // make a safe copy复制gSoap服务实例,包括gSoap上下文;这个副本被传递到新线程中,以便新主线程可以在主线程等待另一个请求时响应请求。