如何通过MULE DotNet连接器调用带有参数的Dot NET方法?

时间:2015-09-16 13:32:53

标签: mule

我试图从我的ESB Mule项目中调用.Net方法。 我在VS 2013中创建了以下类:

namespace NicePerform.ESBDataResolver
{
    public class DataResolver
    {
        public Object InitInfrastructure(string sysAdminURL, string delimiter, int refreshIntervalInMin)
       {
         /// do something
       }
    }
}

In the Mule project I configured DotNet connector.
<dotnet:config name="DotNet_Connector" assemblyType="NicePerform.ESBDataResolver.DataResolver, NicePerform.ESBDataResolver" assemblyPath="D:\tfs\NGA\Splash\ESB\Debug\NicePerform.ESBDataResolver.dll" scope="Singleton" doc:name="DotNet Connector"/>
<dotnet:execute config-ref="DotNet_Connector" methodName="InitInfrastructure(System.String sysAdminURL, System.String delimiter, System.Int32 refreshIntervalInMin)" doc:name="DotNet Connector"/>

我正在填写有效载荷:

{"sysAdminURL":"${sysAdmin}","delimiter":"${delimiter}","refreshIntervalInMin":"${userAdminRefreshInterval}"}

但是在调用.net方法时,我遇到了以下异常:

System.Exception: Error looking for method named InitInfrastructure(System.String sysAdminURL, System.String delimiter, System.Int32 refreshIntervalInMin) : The method name InitInfrastructure(System.String sysAdminURL, System.String delimiter, System.Int32 refreshIntervalInMin) doesn't exist

Server stack trace: 
   at Org.Mule.Api.Component.ComponentLoader.MethodLookUp(Object component, String methodName, MuleMessage message)
   at Org.Mule.Api.Component.ComponentLoader.ExecuteComponent(String assembly, String type, String methodName, MuleMessage message, Boolean isSingleton)
   at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Org.Mule.Api.Component.ComponentLoader.ExecuteComponent(String assembly, String type, String methodName, MuleMessage message, Boolean isSingleton)
   at Org.Mule.Api.Component.ComponentManager.Execute(String assembly, String typeName, String methodName, MuleMessage message, Boolean isSingleton)
   at Org.Mule.Api.Routing.Router.Process(ProcessRequest request)
   at Org.Mule.Api.Routing.__Router.Process0(IntPtr __envp, JniLocalHandle __obj, JniLocalHandle request)

我尝试将命名空间与方法名称一起设置但没有成功。如果我正在更改调用方法签名以接收单个字符串参数 - 它可以工作。我做错了什么?

1 个答案:

答案 0 :(得分:0)

对我来说一切看起来都是正确的,但我没有为它设置examplecode。

您提到您已使用方法名称设置名称空间进行了测试。你是否也测试了Classname和方法名称或两者兼而有之?

在C#中int等于System.Int32,我认为这不会导致问题,但可能是相关的。

在带有连接器的示例文件中,它们对methodName字段使用略有不同的表示法:。由于我们无法在您的代码中发现问题,因此您还可以尝试其他几种方法来调用它。