我试图从我的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)
我尝试将命名空间与方法名称一起设置但没有成功。如果我正在更改调用方法签名以接收单个字符串参数 - 它可以工作。我做错了什么?
答案 0 :(得分:0)
对我来说一切看起来都是正确的,但我没有为它设置examplecode。
您提到您已使用方法名称设置名称空间进行了测试。你是否也测试了Classname和方法名称或两者兼而有之?
在C#中int等于System.Int32,我认为这不会导致问题,但可能是相关的。
在带有连接器的示例文件中,它们对methodName字段使用略有不同的表示法:。由于我们无法在您的代码中发现问题,因此您还可以尝试其他几种方法来调用它。