标签: cfc

是否可以针对组件类型和/或继承类型测试对象?

更新:根据答案我最初使用IsInstanceOf()的路线,这是为这个需要而设计的.然而,由于某些未知原因,它被证明是非常低效的.在稍后调试应用程序时,我最终只是在要使用的对象上设置一些属性而不是IsInstanceOf,从而导致数量级的速度提升.

我想要做的是测试ColdFusion中的一个对象,看看它是什么类型的组件.就像是...

<cfif isValid( "compath.dog", currentObj)>
    ...do something specific with dog objects...
</cfif>
Run Code Online (Sandbox Code Playgroud)

我认为这是可能的,但收到一个错误,说我传递的类型与有效的类型列表中的类型不对应...

有效的类型参数是:any,array,Boolean,date,numeric,query,string,struct,UUID,GUID,binary,integer,float,eurodate,time,creditcard,email,ssn,telephone,zipcode,url,regex,range ,component或variableName.

有没有办法在ColdFusion中实现这一目标?

coldfusion cfc

6
推荐指数
2
解决办法
3604
查看次数

如何保护来自窥探者的CFC中的访问="远程"功能?

CFC的一个重要功能是能够为直接.cfm页面和Flex应用程序重用代码.

我开发的一个这样的应用程序使用Flex来实现其图表功能,并且需要访问cfc中的'getResults()'函数.

所有这些内容都是在身份验证机制背后,但由于cfc将自己打开一个wsdl请求:

https://myserver.com/c/functions.cfc?wsdl

如果正确制作了URL查询,它实际上会将结果返回给浏览器:

https://myserver.com/c/functions.cfc?method=getResults&Term=2009&Course=Anatomy

人们用什么技术来保护cfc免受直接访问,除非请求直接来自CFML处理器或来自Flex Remoting?

apache-flex coldfusion remoting cfc flex3

6
推荐指数
1
解决办法
1147
查看次数

在CF9中编写cfc的编码约定?

通过在CF9中编写CFC的新方法,CF9的一些新编码约定是什么?

以下是我能想到的一些......

coldfusion cfc coldfusion-9

6
推荐指数
1
解决办法
1056
查看次数

从CFC返回查询的内存含义

我在ColdFusion中编写了一个数据库加载脚本,我遇到了一个问题,即脚本内存缓慢耗尽.我用<cfthread>将每个表加载分成自己的线程,当内存下降到50%以下时我调用垃圾收集器(确保在gc()调用之间有30秒以防止垃圾收集器占用内存) .

我创建了一个CFC来保存脚本所需的所有查询.该脚本调用适当的CFC函数,然后返回查询,其中一些查询大小超过2 MB.当我在活动线程的内存页面的详细信息视图中查看服务器监视器时,看起来我的CFC在内存中保留了查询的副本,即使我对查询变量进行了操作并且变量在最后超出了范围功能.另外,我在我的帖子中有一个内存查询的副本.所以我在内存中留下了两个查询副本.这真的发生了什么?如果是,我如何从内存中删除一个查询副本?

coldfusion cfc

6
推荐指数
1
解决办法
1151
查看次数

CFC扩展了兄弟文件夹

我已经看到了在父文件夹中扩展cfcs的各种解决方案,可以访问父文件或CF管理,但我还没有看到一个可行的解决方案,无法访问父文件夹,无法在"共享"/兄弟文件夹中扩展cfc.

此解决方案需要访问父文件夹吗?(不确定这些映射是什么,但无论如何我都无法访问Application.cfc)

这个解决方案需要能够创建一个对我不起作用的application.cfc(在myApp中创建一个没有做任何事情,因为我所在的环境包含myApp中的索引页面并从那里构建...客户端永远不会直接称它为激活Application.cfc的识别

例如:

  • wwwroot的/一些/路径/对myApp /共享/ Base.cfc
  • wwwroot文件/一些/路径/对myApp /功能/ Function.cfc

我希望能够通过super和扩展从Function.cfc调用Base.cfc(包含应用程序中使用的常用方法)中的功能.

我可以访问myApp中的所有文件,但不能访问"wwwroot","some"或"path".

为了在Function.cfc中扩展Base.cfc,我必须扩展"some.path.myApp.Shared.Base"的完整路径.如果有人重命名myApp文件夹,这将导致问题,因为我必须手动编辑每个Function. cfc扩展了Base.cfc

我正在寻找它创建一个特定于应用程序的"障碍",所以如果应用程序文件夹名称更改它不会导致大规模破坏,需要我编辑所有使用Base.cfc功能的CFC文件.

由于我不能使用Base的相对路径("..Shared.Base"),我想知道是否有办法在myApp文件夹中创建一个CFC,我可以从中扩展并减轻重命名的头痛,如果它是发生或给它一个通用名称,如"myApp"并从那里扩展.(myApp.Shared.Base)

我无法访问Application.cfm,也无法访问Coldfusion管理.

coldfusion cfc application.cfc

6
推荐指数
1
解决办法
1126
查看次数

从远程CFC函数返回的JSON出错

我有一个返回结构的远程CFC.它使用cfajaxproxy调用.我希望返回的JSON按顺序排列,即首先进入JSON对象的结构.但是,返回的JSON是混合顺序.

这是远程功能.

<cfcomponent displayname="validation" hint="">
    <cffunction name="validateForm" displayname="validateForm" hint="" access="remote" verifyClient="yes" returntype="struct">

        <cfargument name="formVals" type="struct" required="yes">

        <cfset errors = StructNew()>

        <cfif formVals.project neq "project">
              <cfset errors["project"] = "Invalid project name." />
        </cfif>

        <cfif Len(formVals.description) eq 0>
             <cfset errors["description"] = "Please enter a description." />
        </cfif>

        <cfif StructIsEmpty(errors)>
            <cfset errors["message"]["type"] = "success">
            <cfset errors["message"]["text"] = "Client and server-side validation passed successfully.">
            <cfset errors["areErrors"] = false>
        <cfelse>
            <cfset errors["message"]["type"] = "validation">
            <cfset errors["message"]["text"] = "Please fix the errors, and resubmit.">
            <cfset errors["areErrors"] …
Run Code Online (Sandbox Code Playgroud)

coldfusion jquery json cfc

6
推荐指数
2
解决办法
557
查看次数

Railo中的组件映射

我想将我的所有CFC放入/ components文件夹,并能够从应用程序中的不同位置调用它们,例如.来自/forums/index.cfm.

我该如何设置映射?

coldfusion cfc railo

6
推荐指数
1
解决办法
2792
查看次数

从CFC中包含CFM时的并发和范围问题

我在我的应用程序范围中放置一个组件,以便在所有请求中共享它,它包含一个cfm模板:

<cfcomponent output="false">

    <cffunction name="run" output="false" returntype="void">

        <cfset var tmp = false/>

        <cftry>
            <cfinclude template="inc.cfm"/>
            <cfcatch>
                <cffile action="append"
                        file="#ExpandPath("error.log")#"
                        output="ERROR: #cfcatch.message#"/>
            </cfcatch>
        </cftry>

    </cffunction>

</cfcomponent>
Run Code Online (Sandbox Code Playgroud)

正在包含的模板只是创建一个数组并检查数组长度应该是什么,如果不是它写入error.log文件:

<cfset tmp = [
    "one",
    "two",
    "three"
]/>
<cfif ArrayLen(tmp) neq 3>
    <cffile action="append"
            file="#ExpandPath("error.log")#"
            output="Length = #ArrayLen(tmp)#"/>
</cfif>
Run Code Online (Sandbox Code Playgroud)

如果我然后在它上面运行一个加载(100个并发线程),我会在我的error.log文件中出现以下项目...

ERROR: element at position 3 of array variable &quot;___IMPLICITARRYSTRUCTVAR0&quot; cannot be found.
Length = 0
Length = 2
Run Code Online (Sandbox Code Playgroud)

注意我在Java 1.7.0_09上使用ColdFusion 9.0.1.274733.我在相同的JRE上测试过Railo并且工作正常.


附加以下还会导致问题,将tmp变量更改为结构并在variables范围中添加随机项,而不是在任何地方引用...

<cfcomponent output="false"> …
Run Code Online (Sandbox Code Playgroud)

coldfusion cfc coldfusion-9

6
推荐指数
1
解决办法
246
查看次数

SQL Server Profiler未显示嵌入在ColdFusion组件中的SQL语句

在我们的带有SQL Server 2008 R2的ColdFusion 11应用程序中..cfm文件使用的CF组件使用以下语法调用:

<cfscript>
    objMyTable = createobject('component','components.myTable);
    qmyTable2list = objMyTable.loadAllCustomers();
        qresultset = objMyTable.loadCustomersResultset(form.applicant_type, form.customer_name, form.state, form.orderby);
</cfscript>
Run Code Online (Sandbox Code Playgroud)

CF组件具有SQL语句,如下所示:

<cfquery name="result_set" dataSource="#request.dsn_name#">
        select name, state from myTable #REReplace(where_clause,"''","'","ALL")#        
</cfquery>
Run Code Online (Sandbox Code Playgroud)

当我们单击.cfm页面上的按钮时,应用程序正确显示来自SQL Server 2008-R2的数据.但SQL事件探查器不会捕获这些SQL语句.当我们在使用嵌入式cfquery标签进行sql查询(而不是CF组件)的.cfm页面上运行探查器时,SQL探查器会显示页面执行的所有查询. 问题:我们如何让SQL Profiler捕获CF组件内的查询?

更新 我跟踪在探查器中选择的事件: 在此输入图像描述

sql-server coldfusion cfc sql-server-profiler sql-server-2008

6
推荐指数
1
解决办法
1009
查看次数

Coldfusion CreateObject() 返回错误对象的实例

我遇到了一个似乎只影响我们的生产服务器的问题,没有任何明显的规律或原因。本质上,我们收到以下错误(我将使用虚拟名称来说明这一点):

消息:在组件 Components.services.SomeComponent 中找不到方法 someFunction,在任何实现接口中也没有任何具有此名称的默认方法。

这种情况发生在代码库中的几行不同的地方,但一旦被抛出,它就永远不会再超过该点,直到清除 CFADMIN 中的组件缓存。关键在于:代码中的违规行如下所示:

<cfset var a = createObject("Components.services.app.ComponentA").someFunction() >

似乎createObject对 create ComponentA 的调用返回的是SomeComponent的实例。我尝试过以下方法:

  • 本节中的 CreateObject 调用一直使用动态创建的字符串作为组件路径...我想也许有些东西被污染了,所以现在Components.services.app.ComponentAComponents.services.app.ComponentB等等...都是硬编码的
  • 我尝试使用new语法而不是createObject
  • 我认为组件缓存变得混乱的路径可能有问题,所以我创建了一个映射到./Components/services/app调用(例如)“app”,这样我就可以创建像这样的对象new app.ComponentA()而不是new Components.services.app.ComponentA

似乎没有什么帮助——这些在我们的 UAT 或任何人的开发环境中都无法重现,并且在生产中是间歇性的,但是,一旦抛出,服务器就完成了。清除 CFADMIN 中的组件缓存可以暂时修复它,直到几个小时后有人再次随机抛出它。

一些额外的警告:

  • 当我们移动和洗牌试图找到此问题的原因时,特定的行号和组件似乎发生了变化,但行为始终相同 -new ComponentC()是创建someComponent...new ComponentA()而不是创建someOtherComponent
  • 这种情况只发生在我们的代码库的一个特定部分,与我们的代码的其余部分相比,该部分使用了大量的对象继承。我们进行了彻底梳理,以确保不存在任何循环引用或类似内容,并且邪恶组件 ( someComponent, someOtherComponent) 是位于此目录之外的 CFC
  • 事实上,清除组件缓存似乎可以解决这个问题,这确实让我对组件缓存产生了怀疑……我只是对 CF 的了解不够,无法理解为什么缓存可能会返回与以下对象不同的对象的实例:它正在呼叫的那个

后续步骤(这些都不理想):

  • 完全禁用组件缓存,不想承受性能损失
  • 添加一些荒谬的代码,以便在抛出无效方法名称错误时以编程方式清除组件缓存

是否有某种方法可以精细地排除从组件缓存中检索某些 CFC,并在调用 …

coldfusion cfc createobject coldfusion-2021

6
推荐指数
1
解决办法
179
查看次数