1

我知道这个问题被问到了分配,但找不到我做错的地方。我正在使用反射在 Web 服务 GetProduct 和 RequestLicence 方法上执行方法。这两种方法非常相似。

Web服务中的方法:

[WebMethod]
public LYS.RegistryService.ProductResponse GetProduct(string productNo)
{
  LYS.RegistryService.ProductResponse r = new LYS.RegistryService.ProductResponse();
  return r;
}

我用来调用网络服务的代码

public ServiceResponseBase GetProduct(string productCode)     
{
   object obj = _WebServiceAssembly.CreateInstance("RegisteryService");
   Type typ = obj.GetType();
   object o = typ.InvokeMember(
      "GetProduct", 
      System.Reflection.BindingFlags.InvokeMethod, 
       null, obj, new object[] { productCode });
   return InstantiateObject<ProductResponse>(o);
}

上面的代码工作正常。这是我遇到错误的部分。

[WebMethod]
public LYS.RegistryService.ServiceResponse RequestLicence(LYS.BusinesObjects.Customer c, string productCode, bool isDemoLicence, bool isProductLicence)
{
  LYS.RegistryService.ServiceResponse r = new LYS.RegistryService.ServiceResponse();
  return r;
}

public ServiceResponseBase RequestLicence(LYS.BusinesObjects.Customer c, string productCode, bool isDemoLicence, bool isProductLicence)
      {
        object obj = _WebServiceAssembly.CreateInstance("RegisteryService");
        Type typ = obj.GetType();
        object o = typ.InvokeMember("RequestLicence", System.Reflection.BindingFlags.InvokeMethod, null, obj, new object[] { c, productCode, isDemoLicence, isProductLicence });
        return InstantiateObject<ServiceResponse>(o);
      }

我在以下位置获取方法未找到异常异常:

object o = typ.InvokeMember("RequestLicence", System.Reflection.BindingFlags.InvokeMethod, null, obj, new object[] { c, productCode, isDemoLicence, isProductLicence });

这两个函数非常相似,并且 Web 服务中这两个方法的返回类型来自相同的接口。所以做同样的工作会返回相同的对象,但一个正在工作,另一个没有。

有人可以帮助我吗?

4

1 回答 1

0

有几件事可以尝试:

  • 在调用 typ.InvokeMember 之前创建对象数组。这将有助于隔离问题的根源。

    object[] args = new object[] { c, productCode, isDemoLicence, isProductLicence };

  • 将 args 参数传递给 type.InvokeMember 方法

  • 如果仍然无法正常工作,请验证所有参数数据类型是否正确。

希望这可以帮助。

于 2012-11-05T22:41:16.683 回答