如何在 Apache Royale 中使用 AMFPHP
How to use AMFPHP with Apache Royale
我在使用 SimpleRemoteObject
时遇到问题。 (SDK 0.9.6)
我的实际网站使用此代码通过 Amfphp 调用远程功能:
<mx:RemoteObject id="ro" source="aadmin" destination="amfphp">
<mx:method name="siteLogin" fault="{onRcv_siteLoginErr(event)}" result="{onRcv_siteLogin(event)}"/>
</mx:RemoteObject>
由于 Apache Royale 中不存在 <mx:method/>
我设置了此代码:
</js:beads>
<js:SimpleRemoteObject id="sro" source="aadmin" result="onResult(event)" fault="onFault(event)"
endPoint = "http://amfphp.myserver_url.com/gateway.php"
destination = "amfphp" />
</js:beads>
aadmin
是我的 php class 服务名称
要调用我的函数,我会这样做:
sro.send("siteLogin",["123"]);
其中 siteLogin
是我在 aadmin
中调用的函数 class
运行 这个,我有这个问题:
The class {Amf3Broker} could not be found under the class path {/home/www/amfphp/services/amfphp/Amf3Broker.php}
为什么会显示Amf3Broker
?有没有人有使用 SimpleRemoteObject
和 amfphp
的例子?
服务器端我用https://github.com/silexlabs/amfphp-1.9
我需要设置一个 service-config.xml
文件吗?如果是,如何在编译器中使用它? (我在 compilerOptions 中尝试了 "services": "services-config.xml" 但没有用)
这是我的服务-config.xml :
<services-config>
<services>
<service id="amfphp-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="amfphp">
<channels>
<channel ref="my-amfphp"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://amfphp.myserver.com/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
<properties><add-no-cache-headers>false</add-no-cache-headers></properties>
</channel-definition>
</channels>
</services-config>
现在我用 amfphp V2.0
来自 https://github.com/silexlabs/amfphp-2.0
做了一个测试
这样好一点,但是我有一个错误。 _explicitType
属性 似乎有问题。此外,我在 [requestMessage]
中没有看到我的参数('123')
/onStatusî$flex.messaging.messages.ErrorMessage
correlationId faultCode@ faultDetailfaultStringvUndefined property: stdClass::$_explicitType .
<br>file: /home/www/mysite.com/amfphpv2/Plugins/AmfphpFlexMessaging/AmfphpFlexMessaging.php
<br>line: 113
<br>context: Array
(
[requestMessage] => Amfphp_Core_Amf_Message Object
(
[targetUri] => null
[responseUri] => /1
[data] => Array
(
[0] => stdClass Object
(
[body] => stdClass Object
(
)
[clientId] =>
[correlationId] =>
[destination] => amfphp
[headers] => stdClass Object
(
)
[messageId] => EF4BF9E3-5C02-1060-1FF3-5D9781F55A31
[operation] => 13
[timeToLive] => 0
[timestamp] => 0
)
)
)
[serviceRouter] => Amfphp_Core_Common_ServiceRouter Object
(
[serviceFolders] => Array
(
[0] => /home/www/mysite.com/amfphpv2/Core/../Services/
)
[serviceNames2ClassFindInfo] => Array
(
[AmfphpMonitorService] => Amfphp_Core_Common_ClassFindInfo Object
(
[absolutePath] => /home/www/mysite.com/amfphpv2/Plugins/AmfphpMonitor/AmfphpMonitorService.php
[className] => AmfphpMonitorService
)
[AmfphpDiscoveryService] => Amfphp_Core_Common_ClassFindInfo Object
(
[absolutePath] => /home/www/mysite.com/amfphpv2/Plugins/AmfphpDiscovery/AmfphpDiscoveryService.php
[className] => AmfphpDiscoveryService
)
)
[checkArgumentCount] => 1
)
[explicitTypeField] => _explicitType
)
rootCause
在此先感谢您的帮助...
我知道正在运行的后端(根据我自己的经验)是 Java 和 .NET(Fluorine)。 AMFPHP 也必须工作。其他人尝试过,但差不多是在一年前,当时 AMF 还没有完全开发出来。现在 Royale 中的 AMF 非常健壮并且适用于除 Vector 和 Dictionary 之外的所有类型(我想这些会有一天出现,但由于是 AS3 类型,目前优先级较低)。
这里主要是使用 RemoteObject
的 MXRoyale
版本(mx:RemoteObject
仿真),因为这是最接近 Flex RemoteObject 的版本。 Network
lib 中的其他更轻 类 作为珠子实现,是第一批来到 Royale 的珠子。但至少在我的情况下,我切换到 mx:RemoteObject
,所以我可以确保其他人在同一水平上工作。
这里是一些在 0.9.6 sdk 上测试过的工作代码(请注意,如果你有 mx 库问题,你必须使用 config flex
才能使用 mx)。使用 silexlabs 的 v1.9 和 v2.0 AMFPHP 进行测试:
<fx:Declarations>
<mx:RemoteObject id="ro" result="onResult(event)" fault="onFault(event)" source="your-service-php-class"
endpoint = "https://www.your-amfphp-server.com/amfphp/gateway.php"
destination = "amfphp" />
</fx:Declarations>
然后在脚本中
ro.getOperation("your-php-function-to-call").send("your-param");
[更新]
重要:请务必在您的应用程序中包含此内容,否则您将遇到类似 *The class {Amf3Broker} could not be found*
的错误
<mx:beads>
<js:ClassAliasBead />
</mx:beads>
[更新#2]
您要使用什么 config royale
但还希望 MX 库使用 MX 远程对象?方法如下:
https://github.com/apache/royale-asjs/issues/495#issuecomment-539906300
我在使用 SimpleRemoteObject
时遇到问题。 (SDK 0.9.6)
我的实际网站使用此代码通过 Amfphp 调用远程功能:
<mx:RemoteObject id="ro" source="aadmin" destination="amfphp">
<mx:method name="siteLogin" fault="{onRcv_siteLoginErr(event)}" result="{onRcv_siteLogin(event)}"/>
</mx:RemoteObject>
由于 Apache Royale 中不存在 <mx:method/>
我设置了此代码:
</js:beads>
<js:SimpleRemoteObject id="sro" source="aadmin" result="onResult(event)" fault="onFault(event)"
endPoint = "http://amfphp.myserver_url.com/gateway.php"
destination = "amfphp" />
</js:beads>
aadmin
是我的 php class 服务名称
要调用我的函数,我会这样做:
sro.send("siteLogin",["123"]);
其中 siteLogin
是我在 aadmin
中调用的函数 class
运行 这个,我有这个问题:
The class {Amf3Broker} could not be found under the class path {/home/www/amfphp/services/amfphp/Amf3Broker.php}
为什么会显示Amf3Broker
?有没有人有使用 SimpleRemoteObject
和 amfphp
的例子?
服务器端我用https://github.com/silexlabs/amfphp-1.9
我需要设置一个 service-config.xml
文件吗?如果是,如何在编译器中使用它? (我在 compilerOptions 中尝试了 "services": "services-config.xml" 但没有用)
这是我的服务-config.xml :
<services-config>
<services>
<service id="amfphp-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="amfphp">
<channels>
<channel ref="my-amfphp"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://amfphp.myserver.com/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
<properties><add-no-cache-headers>false</add-no-cache-headers></properties>
</channel-definition>
</channels>
</services-config>
现在我用 amfphp V2.0
来自 https://github.com/silexlabs/amfphp-2.0
这样好一点,但是我有一个错误。 _explicitType
属性 似乎有问题。此外,我在 [requestMessage]
/onStatusî$flex.messaging.messages.ErrorMessage
correlationId faultCode@ faultDetailfaultStringvUndefined property: stdClass::$_explicitType .
<br>file: /home/www/mysite.com/amfphpv2/Plugins/AmfphpFlexMessaging/AmfphpFlexMessaging.php
<br>line: 113
<br>context: Array
(
[requestMessage] => Amfphp_Core_Amf_Message Object
(
[targetUri] => null
[responseUri] => /1
[data] => Array
(
[0] => stdClass Object
(
[body] => stdClass Object
(
)
[clientId] =>
[correlationId] =>
[destination] => amfphp
[headers] => stdClass Object
(
)
[messageId] => EF4BF9E3-5C02-1060-1FF3-5D9781F55A31
[operation] => 13
[timeToLive] => 0
[timestamp] => 0
)
)
)
[serviceRouter] => Amfphp_Core_Common_ServiceRouter Object
(
[serviceFolders] => Array
(
[0] => /home/www/mysite.com/amfphpv2/Core/../Services/
)
[serviceNames2ClassFindInfo] => Array
(
[AmfphpMonitorService] => Amfphp_Core_Common_ClassFindInfo Object
(
[absolutePath] => /home/www/mysite.com/amfphpv2/Plugins/AmfphpMonitor/AmfphpMonitorService.php
[className] => AmfphpMonitorService
)
[AmfphpDiscoveryService] => Amfphp_Core_Common_ClassFindInfo Object
(
[absolutePath] => /home/www/mysite.com/amfphpv2/Plugins/AmfphpDiscovery/AmfphpDiscoveryService.php
[className] => AmfphpDiscoveryService
)
)
[checkArgumentCount] => 1
)
[explicitTypeField] => _explicitType
)
rootCause
在此先感谢您的帮助...
我知道正在运行的后端(根据我自己的经验)是 Java 和 .NET(Fluorine)。 AMFPHP 也必须工作。其他人尝试过,但差不多是在一年前,当时 AMF 还没有完全开发出来。现在 Royale 中的 AMF 非常健壮并且适用于除 Vector 和 Dictionary 之外的所有类型(我想这些会有一天出现,但由于是 AS3 类型,目前优先级较低)。
这里主要是使用 RemoteObject
的 MXRoyale
版本(mx:RemoteObject
仿真),因为这是最接近 Flex RemoteObject 的版本。 Network
lib 中的其他更轻 类 作为珠子实现,是第一批来到 Royale 的珠子。但至少在我的情况下,我切换到 mx:RemoteObject
,所以我可以确保其他人在同一水平上工作。
这里是一些在 0.9.6 sdk 上测试过的工作代码(请注意,如果你有 mx 库问题,你必须使用 config flex
才能使用 mx)。使用 silexlabs 的 v1.9 和 v2.0 AMFPHP 进行测试:
<fx:Declarations>
<mx:RemoteObject id="ro" result="onResult(event)" fault="onFault(event)" source="your-service-php-class"
endpoint = "https://www.your-amfphp-server.com/amfphp/gateway.php"
destination = "amfphp" />
</fx:Declarations>
然后在脚本中
ro.getOperation("your-php-function-to-call").send("your-param");
[更新]
重要:请务必在您的应用程序中包含此内容,否则您将遇到类似 *The class {Amf3Broker} could not be found*
<mx:beads>
<js:ClassAliasBead />
</mx:beads>
[更新#2]
您要使用什么 config royale
但还希望 MX 库使用 MX 远程对象?方法如下:
https://github.com/apache/royale-asjs/issues/495#issuecomment-539906300