RalfSchmidt, the idea is create a factory method that you can use for all methods soe.
You call the method factory and it returns a guid.
The factory method writes in 'server store' a record (guid, status (uninitialised), hasError, result, detail, ect).
You call your method soe and provide your parameters soe and guid
If your method soe 'see' guid check if it exists and has status uninitialised and while it runs update status (failed, completed, completedwitherrors ect), detail ecc. otherwise skip update record.
Your method soe performs like any method sync but client check status using factory method (for same method factory you can create or provide the guid to check the status,result, haserror, details)
The service of your method soe however is subject to timeout settings so you must set timeout for execution of method.
If you use GP you lose benifits of caching soe (inizialize variables in costruct ect)