在 ColdFusion 中将变量传递给 .NET dll

Passing variable to .NET dll in ColdFusion

我用 C# 构建了一个非常简单的 .dll 以从简单的 ColdFusion 页面调用。如果我传入文字值,一切正常,但一旦我尝试传入变量 (#rollYear#),我就会收到一条消息,说明它无法再找到该方法。

coldfusion 页面像这样设置我的 .dll:

<cfobject type="dotnet" name="getParcelData" 
        class="soapDLL.GetSecuredParcelByAPN"    
        assembly="{path}\soapdll.dll">

然后我这样称呼它:

<cfset output = getParcelData.getData("46546504654","cy","#rollYear#")>

如果我使用上面的代码,我会得到一个错误,"The getData method was not found."。如果我用一个值(例如 2017)替换 #rollYear# 变量,那么它工作正常。在我的测试中,我在调用 .dll.

之前通过 CFSET 函数设置了 #rollYear# 变量

我整天都在为这个问题苦思冥想。有没有人有过类似的经历? .dll 非常简单。它只需要 3 个变量,并根据这些设置调用什么 SOAP 服务来拉回一些数据。由于太复杂而无法解释的原因,我无法从 ColdFusion 中进行 SOAP 调用,它必须通过 .net dll。

任何帮助将不胜感激,我的头发不多了。 :)

无论何时使用 Java 或 .NET 组件,在将 ColdFusion variables/values 传递给这些方法时都需要格外注意。如果数据类型不完全匹配,您将遇到一条错误消息,告诉您该方法不存在或与方法签名不匹配。

ColdFusion 提供 javaCast() 以显式转换为所需的数据类型。相应地提出你的论点,在大多数情况下它应该会奏效。

基本示例:
当您传递 methodThatExpectsInt(123) 时,需要整数的方法将抛出错误,因为 ColdFusion 在内部将 123 文字存储为字符串(或 Double)。通过 methodThatExpectsInt( javaCast("int", 123) ) 传递它,数据类型将被正确转换并匹配。