Scenario
I have a Server 2016 set up wth 2 sites; one with a PHP app serving out flash objects and a second site (using Coldfusion) with a load of code for Flash Remoting called by the Flash objects.
I have installed Lucee on a new server. The flash remoting appears to work on 127.0.0.1:8888 and I need to know how to get IIS to send the flash remoting requests to the right place, and where to put all the code for the remote calls. I installed ISAPI redirect to redirect to Tomcat for the CFC files (which works) but that’s not helping with the flash remoting calls.
Can anyone provide some pointers?
Do you get a white screen when you visit: 127.0.0.1:8888/flex2gateway
If yes - you should be good to go – if not, do a google search for Railo flex2gateway – you should find threads to get you going.
Post back if you run into a dead end
Yes, I get a blank screen. I got one of the developers to set up a test SWF and this is what I get back from the remoting call. The FRTest.cfc file is in the root of the web site
/1/onStatusÿÿÿÿ
code[1] Server.Processing rootCausedetailsmessage[1]?No destination with id ‘FRTest’ is registered with any service.
Is there some difference with the way this works in CF?
I have to create a destination in remoting-config.xml ?
The destination id needs to be in the submitted remoting request?
NOTE: I have removed the {context.root} part from the channel definition but it still behaves the same with it
If I put “cs” (destination id) in the remoting request I get a null pointer exception because it can’t find something. Anything else gets me the "No destination with id ‘…’ message
services-config.xml
<channel-definition id="classic-cfamf" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://{server.name}:{server.port}/flashservices/gateway/" class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
<polling-enabled>false</polling-enabled>
<serialization>
<instantiate-types>false</instantiate-types>
</serialization>
</properties>
</channel-definition>
remoting-config.xml
<service id="remoting-service"
class="flex.messaging.services.RemotingService">
<adapters>
<adapter-definition id="cf-object" class="org.lucee.extension.net.flex.LuceeAdapter" default="true"/>
<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter"/>
</adapters>
<default-channels>
<channel ref="my-cfamf"/>
<channel ref="classic-cfamf"/>
</default-channels>
<destination id="cs">
<channels>
<channel ref="classic-cfamf"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
We have this running in a Linux environment. We don’t require a destination in the remoting-config.xml
Do you have your web.xml configured with the MessageBrokerservlet with the location of the services-config.xml? e.g.
<servlet id="MessageBrokerServlet"><servlet-name>MessageBrokerServlet</servlet-name>
<description>Lucee Servlet for Flex Gateway</description>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param><param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<init-param><param-name>messageBrokerId</param-name>
<param-value>_default_</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
what do you have in your services-config.xml & remoting-config.xml?
What you show here is the same as I have. I have tried removing the destination from the remoting config but it doesn’t change anything. I am starting to think the develper who’s doing the flash stuff isn’t putting the destination into the flash config right so it won’t work.
Attached are the configuration files off WEB-INF/flex
messaging-config.xml (506 Bytes) proxy-config.xml (938 Bytes) remoting-config.xml (711 Bytes) services-config.xml (7.3 KB)
thanks @pat.moody but this is the same as what I have. Could you also post your web.xml file from the lucee config level?
I have been bashing my head against this for 3 days now
This is the output from the BlazeDS debug set here - I would be interested to see what you get on a successful call
<logging>
<target class="flex.messaging.log.ConsoleTarget" level="debug">
[BlazeDS]01/21/2020 09:46:57.216 [INFO] [Endpoint.General] Channel endpoint classic-cfamf received request.
[BlazeDS]01/21/2020 09:46:57.263 [DEBUG] [Endpoint.AMF] Deserializing AMF/HTTP request
Version: 0
(Message #0 targetURI=FRTest.dataTest, responseURI=/1)
(Array #0)
[0] = (Object #1)
tstNum = 0.0
id = "ColdFusion"
destination = "ColdFusion"
service = "ColdFusion"
extaTest = "example text being sent"
[BlazeDS]01/21/2020 09:46:57.289 [DEBUG] [Endpoint.AMF] Serializing AMF/HTTP response
Version: 0
(Message #0 targetURI=/1/onStatus, responseURI=)
(Object #0)
code = "Server.Processing"
rootCause = null
details = null
message = "No destination with id 'FRTest' is registered with any service."
from web.xml
<servlet id="CFMLServlet"><servlet-name>CFMLServlet</servlet-name>
<description>Lucee CFML Engine</description>
<servlet-class>lucee.loader.servlet.CFMLServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet id="RestServlet"><servlet-name>RestServlet</servlet-name>
<description>Lucee Servlet for RESTful services</description>
<servlet-class>lucee.loader.servlet.RestServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet id="MessageBrokerServlet"><servlet-name>MessageBrokerServlet</servlet-name>
<description>Lucee Servlet for Flex Gateway</description>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param><param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<init-param><param-name>messageBrokerId</param-name>
<param-value>_default_</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>CFMLServlet</servlet-name>
<url-pattern>*.cfm</url-pattern>
<url-pattern>*.cfml</url-pattern>
<url-pattern>*.cfc</url-pattern>
<url-pattern>/index.cfc/*</url-pattern>
<url-pattern>/index.cfm/*</url-pattern>
<url-pattern>/index.cfml/*</url-pattern>
</servlet-mapping>
<servlet-mapping><servlet-name>RestServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet-mapping><servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/flex2gateway/*</url-pattern>
<url-pattern>/flashservices/gateway/*</url-pattern>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
Some logging info for you:
[BlazeDS]Channel endpoint my-cfamf received request.
[BlazeDS]Deserializing AMF/HTTP request
Version: 3
(Message #0 targetURI=null, responseURI=/12)
(Array #0)
[0] = (Typed Object #0 'flex.messaging.messages.RemotingMessage')
source = "eventservice"
operation = "getEventVersion"
timeToLive = 0
clientId = "F889B029-DD0B-F0AA-D90A-448FE33B5B70"
body = (Array #1)
[0] = "4B9FA712-F7FA-494A-84AB-665FBDF3EA89"
timestamp = 0
headers = (Object #2)
DSEndpoint = null
DSId = "F8899617-0F09-7984-0554-586D27173331"
messageId = "ED6055A5-D009-BFB2-3ADA-CF2217AD6433"
destination = "ColdFusion"
[BlazeDS]Adapter 'cf-object' called 'eventservice.getEventVersion(java.util.Arrays$ArrayList (Collection size:1)
[0] = 4B9FA712-F7FA-494A-84AB-665FBDF3EA89
)'
[BlazeDS]Result: 'ASObject(384874370)....
....
[BlazeDS]Serializing AMF/HTTP response
Version: 3
(Message #0 targetURI=/12/onResult, responseURI=)
(Externalizable Object #0 'DSK')
(Typed Object #1 'EventVersionVO')
contact_name = ""
images = (Externalizable Object #2 'flex.messaging.io.ArrayCollection')
(Array #3)
Ok so this is a version 3 message, and the test code the developer gave produces version 0 messages. These look totally different. Not sure if this has helped but it’s great info thanks
Did you get this working amcss?
I have exact same setup & problem, driving me nuts!