簡體   English   中英

MissingMethodException但我不明白為什么

[英]MissingMethodException but I don't understand why

我正在通過反射創建一個程序集,然后使用它來創建一個WCF服務客戶端的實例。

object obj = 
   assembly.CreateInstance(
       serviceName, true, 
       BindingFlags.CreateInstance,null,createArgs, null, null);

Type type = obj.GetType();

obj的類型為HelloWorldServiceClient。

type.GetMethods()有14個MethodInfo結果。 第一個是{Acme.TestService.HelloWorldResponse HelloWorld(Acme.TestService.HelloWorldRequest)}

但是,當我這樣做

return (T)type.InvokeMember(
    "HelloWorld", BindingFlags.InvokeMethod, null, obj, args);

我得到一個MissingMethodException。

type.ContainsGenericParameters = false。

args是object [1]並包含一個{Acme.TestService.HelloWorldRequest}。

我非常困惑。 誰能幫我嗎?

您也可以使用GetMethod(methodName)而不是Invoke它。 如果動態創建程序集,我會建議這兩個步驟。 通過這種方式,您可以首先找到該方法,然后再調用它。

你說你是通過反射創建程序集...但WCF內部也進行類型生成; 我想知道這里是否有一些重復? 您可以通過以下方式獲取WCF生成的服務類型:

public sealed class WcfClient<T: System.ServiceModel.ClientBase<T>
      where T : class
{
    public T Service { get { return base.Channel; } }
}

然而 - 問題; 如果你使用TypeBuilder ,我想知道你是否還沒有使用DefineMethodOverride將實際方法與接口相關聯。 這可能是C#的隱含,但它需要在IL中明確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM