WCF c# サーバーへの Linux c++ クライアント (gSOAP 経由) があります。WCF c# サービスには、何らかのアクションが実行されるオブジェクトのリストが含まれています。サービスで関数を呼び出すたびに、新しいオブジェクトが作成され、そのオブジェクトに対するアクションが実行され、そのオブジェクトがサービスのリストに配置されます。最後に、サービスで別の関数を呼び出しています。これは、リスト内のすべてのオブジェクトをループし、それらに対して別の呼び出しを実行します。これは、クライアントとサービスの両方の純粋な WCF を使用して、c# で意図したとおりに機能します。
gSOAP では動作が異なります。gSOAP を介してサービスで最初の関数を呼び出すたびに、そのアクションが実行され、リストが更新されます。毎回新しいサービスです。基本的に毎回新しいサービスを扱っています。inux側に置くために、オブジェクト自体をシリアライズ/デシリアライズしません。
これを解決する方法はありますか?
C#側では、次のようなものがあります(不要な詳細はスキップされました)
クラス サービス : IService { リスト リスト = 新しいリスト(); void func1(int i) { Class1 c = 新しい Class1(i); c.create(); list.Add(c); } ボイド関数2() { foreach(リスト内の Class1 c) { c.close(); } } }
gSOAP側には次のようなものがあります
プロキシ サービス (エンドポイント); service.func1(1); service.func1(2); //... service.func2();
私が言ったように、問題は次のとおりです。 func2() が実行されると、空のリストで動作します。つまり、プロキシ サービスの gSOAP オブジェクトにはサービスの c# オブジェクトが含まれません。
助けて!
ps。解決策が見つかりました。コンテナを「静的」にするとうまくいきます。