用反射调用泛型类属性中的WCF方法

本文关键字:WCF 方法 属性 反射 调用 泛型类 | 更新日期: 2023-09-27 18:11:12

我有以下类:

 Public Class WcfClient(Of T)
        Private _Cliente As T
        Public ReadOnly Property Client As T
            Get
                Return _Cliente
            End Get
        End Property

T,表示Wcf通道,它是这样创建的:

Dim channel As New ChannelFactory(Of T)(basicHttpBinding, remoteAddress)
'Set the property
 _Cliente = channel.CreateChannel()

现在,通过反射,我正在创建WcfClient的实例,并且我想执行一个在Client属性内的方法。

Type tipo = FindInterface(Request.GetFriendlyUrlSegments()[0]);
Type genType = typeof (WcfClient<>).MakeGenericType(tipo);
var client = Activator.CreateInstance(genType);    
var clientProp = client.GetType().
                GetProperties().Where(p => p.Name == "Client").FirstOrDefault();
 if (clientProp != null)
 {
    var method =clientProp.PropertyType
                   .GetMethod(Request.GetFriendlyUrlSegments()[1]);
     ProcesoBase procesoBase = new ProcesoBase();
     foreach (var prop in typeof (ProcesoBase).GetProperties())
     {
          //Here we have some code to fill ProcesoBase properties   
      }
    }
  var result = method.Invoke(clientProp, new object[] { procesoBase });

调用方法时。调用I am getting Object does not match target type in exception

我正在从clientProp变量中获取MethodInfo类,所以我不知道这是如何发生的。

这可能是因为生成的通道类被构建为proxy_TransparentProxy类吗?

用反射调用泛型类属性中的WCF方法

好的,我通过使用GetValue而不是使用GetProperties获取客户端属性来解决这个问题:

  PropertyInfo p = client.GetType().GetProperty("Client");
  MethodInfo m = p.PropertyType.GetMethod(Request.GetFriendlyUrlSegments()[1]);
  object clientProp = p.GetValue(client);