我在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#")>
如果我使用上面的代码,则会出现错误,“未找到getData方法。” 。如果我将#rollYear#
变量替换为一个值(例如2017),则它可以正常工作。在我的测试中,在调用.dll之前,我已经通过#rollYear#
函数设置了CFSET
变量。
这整天我一直在head头。有没有人有类似的经历? .dll非常简单。它只需要3个变量,并根据这些变量设置要调用的SOAP服务以提取一些数据。出于难以解释的原因,我无法从ColdFusion内部进行SOAP调用,它必须通过.net dll。
任何帮助将不胜感激,我的头发还不多。 :)
答案 0 :(得分:5)
无论何时使用Java或.NET组件,将ColdFusion变量/值传递给这些方法时都需要格外注意。如果数据类型不完全匹配,您将遇到一条错误消息,告诉您该方法不存在或与方法签名不匹配。
ColdFusion提供javaCast()
来显式转换为所需的数据类型。相应地提出您的论点,并且在大多数情况下应该可以解决。
基本示例:
当您传递methodThatExpectsInt(123)
时,期望整数的方法将引发错误,因为123
文字由ColdFusion内部存储为字符串(或Double)。通过methodThatExpectsInt( javaCast("int", 123) )
传递数据,数据类型将被正确地转换并匹配。