1

この質問が割り当てられていることは知っていますが、どこが間違っているのかわかりません。リフレクションを使用して、Web サービスの GetProduct および RequestLicence メソッドでメソッドを実行しています。これら 2 つの方法は非常に似ています。

Web サービスのメソッド:

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

Webサービスを呼び出すために使用しているコード

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 });

これら 2 つの関数は非常に似ており、Web サービスでこれら 2 つのメソッドが返す型は同じインターフェイスから派生しています。したがって、同じオブジェクトを返す同じ作業を行っていますが、一方は機能していますが、もう一方は機能していません。

誰でも私を助けることができますか?

4

1 に答える 1

0

試してみるべきことがいくつかあります。

  • typ.InvokeMember を呼び出す前にオブジェクト配列を作成します。これは、問題の原因を特定するのに役立ちます。

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

  • args パラメータを type.InvokeMember メソッドに渡します

  • それでも機能しない場合は、すべてのパラメーターのデータ型が正しいことを確認してください。

お役に立てれば。

于 2012-11-05T22:41:16.683 に答える