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

3

我使用C#编写了一个非常简单的.dll文件,可以从一个简单的ColdFusion页面中调用。如果我传递直接值,一切运行良好,但是当我尝试传递变量(#rollYear#)时,会收到一个消息,指出无法再找到该方法。

ColdFusion页面如下设置我的.dll:

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

I then call it like this:

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

如果我使用上面的代码,会出现错误提示:“未找到getData方法”。如果我用一个数值(例如2017)替换变量#rollYear#,则可以正常工作。在我的测试中,我已经通过CFSET函数设置了#rollYear#变量,然后才调用了.dll文件。
我一整天都在苦思冥想这个问题。有没有人有类似的经历?这个.dll非常简单,它只需要三个变量,根据这些变量设置要调用哪个SOAP服务来获取一些数据。由于原因太复杂无法解释,在ColdFusion内部无法进行SOAP调用,必须通过.net dll来实现。
如果你能提供任何帮助,我将不胜感激,因为我剩下的头发已经不多了。:)

2
使用工作值,您是传递 ..."cy","2017")> 还是 ..."cy",2017)>?第三个参数期望什么数据类型?您可能需要使用 javaCast() 转换 ColdFusion 变量以匹配 .NET 的 getData 方法签名。 - Alex
1
就是这样,将javacast转换为字符串解决了问题。谢谢! - Matt
1
我提名@Alex发布一个答案。 - Dan Bracuk
1个回答

5
无论你使用Java还是.NET组件,当向这些方法传递ColdFusion变量或值时,需要特别注意数据类型是否精确匹配。如果数据类型不完全匹配,则会出现错误消息,告诉您该方法不存在或与方法签名不匹配。
ColdFusion提供javaCast()来显式转换为所需的数据类型。按照要求转换参数,大多数情况下就可以正常工作。
基本示例: 当你传递methodThatExpectsInt(123)时,期望整数的方法将抛出错误,因为ColdFusion将123文字作为字符串(或Double)内部存储。通过使用methodThatExpectsInt(javaCast("int", 123))进行传递,数据类型将被正确转换并匹配。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接