【问题标题】:How to call Dot NET method with parameters by MULE DotNet connector?如何通过 MULE DotNet 连接器调用带参数的 Dot NET 方法?
【发布时间】:2015-09-17 18:44:24
【问题描述】:

我正在尝试从我的 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)

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

【问题讨论】:

    标签: mule


    【解决方案1】:

    在我看来一切都是正确的,但我没有为它设置示例代码。

    您提到您已经使用方法名称设置命名空间进行了测试。您是否还测试了 Classname 和方法名称或两者?

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

    在带有连接器的示例文件中,它们对 methodName 字段使用稍微不同的表示法:.由于我们在您的代码中找不到问题,因此您也可以尝试其他几种调用方式。

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 2012-03-30
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2014-04-20
      • 2012-06-22
      相关资源
      最近更新 更多