2013-03-02 58 views
1

好吧,這讓我非常生氣。我已經在整個互聯網上關注了將近8篇教程,最終,我的Red5服務器實例正常運行。對我好!但是,當我打電話給我的Red5應用我的Java方法從我的AS3的應用程序,在Eclipse中的「控制檯」窗口中,我得到這個錯誤:無法通過AS3在red5服務器上調用方法Flash CS6

[ERROR] [NioProcessor-1] org.red5.server.service.ServiceInvoker - Method getTheName with parameters [] not found in [email protected] 

這是我的Application.java文件。

package org.red5.core; 

import org.red5.server.adapter.ApplicationAdapter; 
import org.red5.server.api.IConnection; 
import org.red5.server.api.IScope; 
import org.red5.server.api.service.ServiceUtils; 

/** 
* Sample application that uses the client manager. 
* 
* @author The Red5 Project ([email protected]) 
*/ 
public class Application extends ApplicationAdapter { 

    /** {@inheritDoc} */ 
    @Override 
    public boolean connect(IConnection conn, IScope scope, Object[] params) { 
     return true; 
    } 

    /** {@inheritDoc} */ 
    @Override 
    public void disconnect(IConnection conn, IScope scope) { 
     super.disconnect(conn, scope); 
    } 

    public String getTheName() { return "MyName!"; } 
} 

這是我的AS3代碼。我只是把它放在時間軸上。

var nc:NetConnection = new NetConnection(); 
nc.connect("http://localhost/Mintium/RoomHere", "SomeUsernameHere"); 
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); 
nc.objectEncoding = ObjectEncoding.AMF0; 

function onNetStatus(e:NetStatusEvent):void 
{ 
    switch (e.info.code) 
    { 
     case "NetConnection.Connect.Success" : 
      trace("connected"); 
           nc.call("getTheName", new Responder(getName_result, getName_error)); 
      break; 
    } 
} 

function getName_result(res:Object):void { append("Name : " + res.toString()); } 
function getName_error(res:Object):void { append(res.toString()); } 

它已經一個星期了,我一直試圖弄清楚,我的日期是下個月。如果這些東西沒有解決,我會失敗的。請幫我解決我的問題。非常感謝你。

+0

不確定,但爲什麼你使用AMF0作爲對象編碼。Red5還支持AMF3,這是您在使用ActionScript 3時應該更喜歡的編碼。AMF0對象編碼更爲過時,應該僅用於ActionScript 1.0和2.0中較舊的東西 – 2013-03-04 23:02:48

回答

0

對不起,我沒有看到這2個月前,我本可以幫你通過你的評估。儘管如此,我想我可以回答這個問題,因爲有類似的問題調用Red5服務。

解決這個問題的關鍵在於Red5的那些利用Spring框架的部分。在您的項目中,應該有一個名爲red5-web.xml的文件,位於Server項目的WEB-INF文件夾中。該文件包含Red5的Spring組件使用的一些Bean依賴項。這在我閱讀的教程中,甚至在大部分(相當稀疏和分佈的)red5編程文檔中都沒有提及。

你需要做的是在該文件中爲你的方法添加一個bean條目。在你的情況下,該條目應該是這樣的:

<bean id="getTheName.service" class="org.red5.core.Application" /> 

注意我用你的函數的名稱,以「服務」追加。我不明白爲什麼,但你需要附加「.service」以便Red5找到你的功能。您需要爲每個想要用作服務的功能類添加類似的條目。

當然,我基於上面提到的關於將服務放入應用程序類的事實 - 我永遠不會這樣做。如果您閱讀red5-web.xml文件,您將看到該類已經有一個條目,因爲它已經通過Spring注入,作爲用於處理Web上請求的「端點」的類。我不知道是否將Application類用作端點和服務提供者是一個好主意(它違反了OOP中的「關注點分離」,並可能導致Spring出現問題)。

我通常會做的是在org.red5.core包(或任何其他可能需要的包)中添加一個單獨的類,該包提供所需的服務,然後將條目放入red5-web.xml中類和它的方法。因此,對於您的項目,讓我們假設你有一個名爲NameProvider在org.red5.core包裝類:

public class NameProvider 
{ 
    public NameProvider() {} 
    public String getTheName() { return("MyName!"); } 
} 

,那麼你將以下條目添加到您的RED5-web.xml文件:

<bean id="getTheName.service" class="org.red5.core.NameProvider" /> 

這應該使一切工作。

我希望這可以幫助您在未來或任何其他人有這個問題。我只希望我早點見過這個問題。