3

我在使用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>

由于<mx:method/>Apache Royale 中不存在,我设置了以下代码:

 </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 类服务名称

要调用我的函数,我会:

 sro.send("siteLogin",["123"]);

我在课堂siteLogin上调用的函数在哪里aadmin

运行这个,我有这个问题:

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”但没有工作)

这是我的 service-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.0https://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   

在此先感谢您的帮助...

4

2 回答 2

2

这是一些在 0.9.6 sdk 上经过测试的工作代码(请注意,config flex如果您有 mx 库问题,您必须使用才能使用 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>

[update#2] 你要使用什么config royale但还希望 MX 库使用 MX 远程对象?方法如下: https ://github.com/apache/royale-asjs/issues/495#issuecomment-539906300

于 2019-10-07T10:19:34.000 回答
1

我知道正在工作的后端(根据我自己的经验)是Java.NET(Fluorine)AMFPHP也必须工作。其他人尝试过,但差不多是一年前 AMF 还没有完全开发出来的时候。现在,Royale 中的 AMF 非常健壮,并且对除 Vector 和 Dictionary 之外的所有类型都非常有效(我想这些类型有一天会出现,但由于是 AS3 类型,目前优先级较低)。

这里主要是使用( emulation)MXRoyale的版本,因为这是最接近 Flex RemoteObject 的版本。lib 中的其他类是更轻的类,它们作为珠子实现,它们是第一个来到 Royale 的。但至少在我的情况下,我切换到,所以我可以确保其他人在同一水平上工作。RemoteObjectmx:RemoteObjectNetworkmx:RemoteObject

于 2019-10-04T19:00:36.793 回答