2011-12-20 11 views
0

ウェブサービスへの複数のクライアントへの同時アクセスを許可し、クライアントがリクエストを行い、データが利用可能になるまでブロックします(gsoapは通知をサポートしていないのでこの方法です)gsoapを使用した複数の同時クライアント

私のwebserviceクラスは、WITH_PURE_VIRTALでコンパイルされています。つまり、抽象クラスであるため、インスタンスを作成できません。したがって、私はwebserviceクラスを継承し、webservice要求とwebclient要求の管理を担当する私が構築したクラスを使用します。

しかし、クラスが既存のクライアントを処理しているときに、他のリクエストを受信できないようです。

私が読んで、あなたがこれに似たものでスレッドを起動する必要があります(here):私は行っていないコールを提供し、代わりに私のWebServiceクラスを呼び出すためにそのコードを変更すると、しかし

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); 

何でも

Webサービスコールメソッド内で新しいスレッドを起動しようとしましたが、スレッドが起動するとすぐに、Webクライアントは空の応答を受け取ります。

誰にも提案はありますか?

答えて

1

this質問への私の答えを見れば、非常に基本的なC++スレッド化gSoapサーバーが見えます。私があなたが欠けているかもしれないと思うのは、サービスクラスをコピーする必要があるということです。私のコードでは、tc = c.copy() ; // make a safe copy行はgSoapコンテキストを含むgSoapサービスインスタンスをコピーします。メインスレッドが別の要求が行われるのを待つ間に新しいスレッドが要求に応答できるように、このスレッドは新しいスレッドに渡されます。

+0

これは正解です。私は抽象的なコピーメソッドを実装する必要があり、複数のクライアントを処理することができました。入力いただきありがとうございます! – Daniel