호출 할 WS 메서드의 이름과 서비스가받는 유일한 매개 변수의 형식과 값을 저장하는 클래스가 있습니다 (매개 변수의 컬렉션이되지만 간단하게 유지할 수 있습니다)이 예를 들면 :매개 변수가 일반에서 가져온 메서드를 호출하십시오.
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);
}
}
나는 메소드 이름과 매개 변수를 사용하고 반사를 사용하는 방법을 호출하고 결과를 반환하는 방법이있다. 그걸 사용하면 잘 작동합니다.
callingclass.URL = url;
callingclass.Service = serviceName;
object[] Params = { (decimal)1 };
callingclass.CallMethod("Hello", Params);
그러나이 예의 십진법은 MethodCall의 인스턴스에서 제공됩니다. 이 코드 그래서 만약 :
MethodCall call = new MethodCall();
call.Method = "Hello";
call.ParType = typeof(decimal);
call.ParValue = "1";
옵션 1, 컴파일되지 않습니다 :
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?)
옵션 2,도 컴파일하지 않습니다
object[] Params = { call.CastedValue<call.ParType>() }; //Compilation error: Cannot implicitly convert type 'call.ParType' to 'object'
옵션 3, 반사를 사용하여 컴파일 할 수는 있지만 서비스를 호출 할 때는 작동하지 않습니다.
object[] Params = { typeof(MethodCall).GetMethod("CastedValue").MakeGenericMethod(call.ParType).Invoke(this, null) };
callingclass.CallMethod(call.Method, Params);
예외 : ConnectionLib.WsProxyParameterExeption : URL 'http://localhost/MyTestingService/'의 'TestService.Hello'메서드에 대한 매개 변수가 잘못되었습니다.
그렇다면 누군가 내가이 작업을 수행하는 올바른 방법을 가르쳐 줄 수 있습니까?
감사