Почему я не могу вызвать метод в компоненте Coldfusion?

Я использую Coldfusion8 и застрял, пытаясь вызвать компонент. Это работало до нескольких дней назад, и хотя я не могу припомнить, чтобы что-то изменилось, теперь все мои вызовы этого компонента терпят неудачу.

Вот код:

<cfinvoke component="form_mailer_user" method="msg_contact">
     <cfinvokeargument name="userData" value="#Local.User#"/>
</cfinvoke>  

На самом деле ничего особенного, кроме, может быть, передачи структуры как аргумента.

Я получаю следующую ошибку:

 Could not find the ColdFusion Component or Interface form_mailer_user. 
 Ensure that the name is correct and that the component or interface exists

Он существует в порядке... так что я могу сделать, чтобы попытаться получить к нему доступ?

Спасибо за помощь!

EDIT:
Оба файла находятся в одной папке с именем services. У меня есть сопоставление для этой папки в моем application.cfc

THIS.mappings["/services"] = GetDirectoryFromPath( GetCurrentTemplatePath() ) & "services";

Но попытка вызвать компонент так:

services.form_mailer_user
services.form_mailer_user.cfc

также не работает.

EDIT:
Мой application.cfc

<cfcomponent displayname="Application" output="false" hint="Application handler">   
    <cfscript>
        THIS.name = "abc";
        THIS.sessionManagement = "true";        
        THIS.sessionTimeout = createTimeSpan(0,2,0,0);
        THIS.s3.acceesKeyid = "___";
        THIS.s3.awsSecretKey = "___";
        // mappings
        THIS.mapping = {};
        THIS.mappings["/controllers"] = GetDirectoryFromPath( GetCurrentTemplatePath() ) & "controllers";
        THIS.mappings["/services"] = GetDirectoryFromPath( GetCurrentTemplatePath() ) & "services";
    </cfscript>

    <cffunction name="onApplicationStart" returnType="boolean" output="false" hint="">
        <cfscript>
            Application.strConfig = structNew();
            Application.strConfig.datasource = "___";
            Application.strConfig.rootDir = "test/members/";
            Application.strConfig.emailErrorMessaging = "on";
        // pre
            Session.activeSession = "No";
            Session.activeLog = "No";
        </cfscript>
        <cfreturn true />
    </cffunction>

    <cffunction name="onSessionStart" returnType="boolean" output="false" hint="session initalizer">
        <cfscript>
            var Local = {};
            Local.cfid = Session.cfid;
            Local.cftoken = Session.cftoken;
            StructClear( SESSION );
        </cfscript>

        <!---SESSION  --->
        <cfparam name="Session.log" default="">
        <cfparam name="Session.activeLog" default="No">
        <cfscript>
            Session.cfid = Local.cfid;
            Session.cftoken = Local.cftoken;
            Session.activeSession = "Yes";              
            Session.datasource = Application.strConfig.datasource;
            Session.testpath = "tes/";
            Session.tpu = "../";
            Session.bucketPath = "http://s3.amazonaws.com/";
            Session.bucketName = "___";
        </cfscript> 
        <cfreturn true />
    </cffunction>

    <cffunction name="onRequestStart" returnType="boolean" output="false" hint="Pre page processing!">         
        <cfscript>
            var LOCAL = {};             
        </cfscript> 
        <!--- DEBUG --->
        <!---
            <cfif structKeyExists(url,'reset')>
                <cfcache action="flush">
                <cfset OnApplicationStart() />
                <cfset THIS.OnSessionStart() />
            </cfif>
            --->
            <cfif len( Session.errMsgs ) EQ 0> 
                <cfinvoke component="services.errorMsg" method="createErrMsgsLog" returnvariable="errMsgs"></cfinvoke>
                <cfset Session.errMsgs = errMsgs> 
            </cfif> 
        <cfreturn true />
    </cffunction>
    <!--- custom functions --->
<cfinclude template="templates/tmp_functions.cfm">
</cfcomponent>

EDIT:
Кажется, я приближаюсь. У меня есть другой почтовик (та же папка) и я просто поменял его на замену своего

 <cfinvoke component="form_mailer_other" method="msg_contact">
     <cfinvokeargument name="userData" value="#Local.User#"/>
</cfinvoke>

Теперь Coldfusion не может найти метод, но это означает, что он нашел файл cfc. Может ли это быть ошибкой внутри моего mailer.cfc?

РЕШЕНИЕ.
Боюсь сказать...

Опечатка в имени файла от_mailer_user... Спасибо всем за помощь!


person frequent    schedule 19.08.2012    source источник
comment
В каком каталоге CFM выполняет cfinvoke и где находится CFC? В зависимости от выполняемого вами вызова они должны находиться в одном каталоге.   -  person BKK    schedule 20.08.2012
comment
да, они в одном каталоге (у меня тоже есть маппинг на этот каталог, но использовать его тоже не получается). Вызываемый CFC обрабатывает все мои сообщения электронной почты, поэтому я передаю структуру с контактными данными и т. д. и отправляю сообщения из user_mailer.cfc.   -  person frequent    schedule 20.08.2012
comment
Выложите, пожалуйста, ваш application.cfc Какая у вас операционная система? Это может быть долгим шагом, но попробуйте добавить косую черту & services/ в конце оператора сопоставления.   -  person BKK    schedule 20.08.2012
comment
Coldfusion8/MySQL 5.0.88. Apache под управлением Windows (я полагаю). Скоро появится Application.cfc.   -  person frequent    schedule 20.08.2012
comment
Попробуйте также переключиться на: GetBaseTemplatePath() вместо currentTemplatePath   -  person BKK    schedule 20.08.2012
comment
Я попробовал ваш application.cfc под CF9, и он работал нормально, к сожалению, у меня больше нет CF8 для тестирования. Я бы попробовал создать test.cfm и сначала попытаться сопоставить его с CFC, используя жестко заданный путь, и посмотреть, столкнетесь ли вы с подобными проблемами. Следует отметить, что в вашем Application.cfc вы устанавливаете структуру с именем this.Mapping = {} вместо this.Mappings = {}, но это не должно иметь значения. Я не думаю, что вам все равно нужно инициализировать структуру. Вы недавно перезапускали приложение? Быстрый способ — просто переименовать this.name или выполнить ApplicationStop(); Я в тупике!   -  person BKK    schedule 20.08.2012
comment
Решение: опечатка -> Ааааа! :D (ну ладно)   -  person BKK    schedule 20.08.2012
comment
@BenKoshy: спасибо за вклад. Я только что нашел проблему... компонент был назван from_mailer_user.cfc против form_mailer_user.cfc. Думаю, здесь уже слишком поздно ... Если вы хотите сделать свой комментарий выше ответом, я проверю и проголосую. Спасибо за помощь!   -  person frequent    schedule 20.08.2012


Ответы (2)


если файлы CFC и CFM находятся в разных каталогах, вам нужно добавить точку к имени каталога, в котором находится CFC. Увидеть ниже. (каталог.form_mailer_user)

person Matt Tholey    schedule 19.08.2012
comment
тот же каталог, хотя. Я постараюсь указать полный путь, чтобы посмотреть, что произойдет. - person frequent; 20.08.2012

Добавьте атрибут access="public" в определение методов, которые вы не можете "видеть", например:

<cffunction name="onRequestStart" access="public" returnType="boolean" output="false" hint="Pre page processing!"> ...
person boycaught    schedule 10.03.2013
comment
тем временем заставил его работать, также используя access="public", так что, возможно, это было так. - person frequent; 10.03.2013
comment
access=public должен разрешить любому другому CFC на вашем сервере доступ к методам в вызываемом CFC. Частные методы могут быть вызваны только из CFC. Пакет позволяет CFC в одном и том же каталоге обмениваться данными, а удаленный доступ можно вызывать с разных серверов (т. е. веб-сервисов). Рад видеть, что вы исправили это. - person boycaught; 11.03.2013