Переменные сеанса и удаленные вызовы CFC - PullRequest
0 голосов
/ 27 июня 2011

Почему ColdFusion не распознает мою переменную сеанса при удаленном вызове CFC?

Пример:

У меня есть CFC, который я вызываю с использованием:

http://www.mywebsite.com/CFC/myfunc.cfc?method=dosomething;arg1=foo;arg2=foo2

Если я добавлю следующее ...

<cfdump var="#session#" abort>

... в самую первую строку myfunc.cfc, я увижу правильно отображаемый cfdump всех моих переменных сеанса.Однако, если я сделаю что-то простое, например:

<cfset myvar = session.datasrc>

, я получу ошибку 500.Элемент DATASRC не определен в СЕССИИ.

session.datasrc появляется в cfdump, и если я не получаю к нему удаленный доступ (как с <cfinvoke>), он работает нормально.Я пропускаю какое-то свойство или настройку в CFIDE?Что-то где-то не позволяет удаленным вызовам CFC получить доступ к переменным сеанса.Спасибо.

Ответы [ 3 ]

3 голосов
/ 28 июня 2011

Вызовы «удаленному» cfc поддерживают сеанс, если он вызывается через браузер.

<cffunction access="remote" returntype="any" output="No" hint="this hint" name="test">
    <cfargument required="false" name="username" type="string" default=""/>

    <cfset session.username="#arguments.username#">
    <cfreturn session>

</cffunction>

Вызовите cfc с помощью http://localhost:8500/CFCs/your.cfc?method=test, и вы увидите, что идентификатор сеанса останется постоянным.Назовите его как http://localhost:8500/CFCs/your.cfc?method=test&username=bob, и вы установите переменную сеанса, удалите аргумент из URL-адреса, и переменная сеанса будет сохранена.

Если вы вызываете удаленный CFC без использования браузера, вынужно будет "вручную" передать идентификатор сеанса, как обсуждено здесь

3 голосов
/ 27 июня 2011

Удаленные вызовы cfc не имеют смысла сеанса. Это всегда одноразовая сделка.

Если вы получите доступ к cfc через URL, как вы указали выше, вы получите сеанс, потому что это похоже на доступ к нему как к странице. Веб-сервер будет проходить через все элементы, такие как файлы cookie сеанса, к серверу, делая область действия сеанса доступной для cfc.

Если вы обращаетесь к cfc удаленно, компонент ничего не будет доступен из-за того, как он был запрошен.

Вы никогда не должны полагаться на переменные области действия внутри методов службы. Либо внедрите их, используя что-то вроде coldspring, чтобы обеспечить зависимость от службы «конфигурации», либо передайте значения в качестве аргументов.

Чтобы быть грубым с вами, область сеанса абсолютно не подходит для хранения имен источников данных. Учитывая, что вы используете ColdFusion 9, вас может заинтересовать настройка источника данных для всего приложения в Application.cfc

1 голос
/ 27 июня 2011

Сеанс не подходит для таких переменных, как источник данных, если у вас нет разных источников данных для разных пользователей.Область применения - это правильное расположение переменных приложенияСначала я бы попытался использовать область приложения и посмотреть, есть ли у вас проблемы.Также проверьте такие вещи, как написание имени переменной, и попробуйте выполнить эту функцию локально изнутри приложения с помощью вызова CFINVOKE (установите функцию в public, если вам нужно), чтобы проверить, работает ли она локально.Тогда вы знаете, что это, вероятно, связано с тем, как вы называете это удаленно.

...