J'ai une classe qui stocke le nom d'une méthode WS à appeler et le type et la valeur du seul paramètre que le service reçoit (ce sera une collection de paramètres mais gardons-la simple pour l'exemple):appeler une méthode avec des paramètres obtenus à partir de la méthode générique
public class MethodCall
{
public string Method { get; set; }
public Type ParType { get; set; }
public string ParValue { get; set; }
public T CastedValue<T>()
{
return (T)Convert.ChangeType(ParValue, ParType);
}
}
J'ai une méthode qui prend le nom de la méthode et les paramètres et utilisant la réflexion appelle la méthode et renvoie le résultat. Que l'on fonctionne très bien quand je l'utilise comme ceci:
callingclass.URL = url;
callingclass.Service = serviceName;
object[] Params = { (decimal)1 };
callingclass.CallMethod("Hello", Params);
Mais mon type, décimal dans l'exemple, est donnée dans le cas de MethodCall. Donc, si j'ai ce code:
MethodCall call = new MethodCall();
call.Method = "Hello";
call.ParType = typeof(decimal);
call.ParValue = "1";
Option 1, ne compile pas:
object[] Params = { (call.ParType)call.ParValue }; //Compilation error: The type or namespace name 'call' could not be found (are you missing a using directive or an assembly reference?)
Option 2, ne compile pas ni:
object[] Params = { call.CastedValue<call.ParType>() }; //Compilation error: Cannot implicitly convert type 'call.ParType' to 'object'
Option 3, en utilisant la réflexion , compile mais ne fonctionne pas lorsque vous appelez le service:
object[] Params = { typeof(MethodCall).GetMethod("CastedValue").MakeGenericMethod(call.ParType).Invoke(this, null) };
callingclass.CallMethod(call.Method, Params);
L'exception est la suivante: ConnectionLib.WsProxyParameterException: Les paramètres de la méthode 'TestService.Hello' dans l'URL 'http://localhost/MyTestingService/' sont incorrects.
Alors, quelqu'un peut-il me signaler la bonne façon de faire ce travail?
Merci