private static dynamic genericWsCall(string tspUrl, string genType, string genTaskType, dynamic paras)
        {
            //client
            var serviceUrl = tspUrl;
            var binding    = new BasicHttpBinding();

            binding.Security.Mode = BasicHttpSecurityMode.Transport;
            binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
            var endpoint = new EndpointAddress(new Uri(serviceUrl));
            var client   = new WsClient(binding, endpoint);

            //prepare call
            Type       wsType   = Type.GetType(genType);
            MethodInfo wsMethod = wsType.GetMethod(genTaskType);
            dynamic    result;

            try
            {
                client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "<Fingerprint>");
                client.OpenAsync().Wait();
                var task = (Task)wsMethod.Invoke(client, new object[] { paras });
                task.Wait();
                result = task.GetType().GetProperty("Result").GetValue(task);
                client.CloseAsync().Wait();
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
                client.Abort();
                throw ex;
            }
            return(result);
        }