Как в AS3 можно динамически добавлять операции к объекту WebService?

Допустим, у вас есть объект WebService, определенный внутри тега fx: declrations в MXML, с некоторыми операциями в нем, а также с обработчиками ответов и ошибок для этих операций. Теперь предположим, что вы хотите передать этот WebService в конструктор другого объекта, который затем добавит операцию в WebService во время выполнения вместе со своими собственными функциями ответа и обработчика ошибок для этой новой операции.

Например:

<fx:Declarations>
    <s:WebService id="ws" fault="Alert.show('failure')">
        <s:operation
            name="Op1"
            resultFormat="object"
            result="WebOp1(event);"
            fault="WebFaultOp1()"
        />
    </s:WebService>
</fx:Declarations>

.
.
.
        var a:A = new A(ws);

и:

public class A
{
    private var m_ws:WebService;

    public function A(pWS:WebService)
    {
        m_ws = pWS;
        m_ws.Op2 = new Operation();
        m_ws.Op2.resultFormat = "object";
        m_ws.Op2.result = WebOp2(event);
        m_ws.Op2.fault = WebFaultOp2(event);
    }

    private function WebOp2(pEvent:ResultEvent):void
    {
    }

    private function WebFaultOp2(pEvent:FaultEvent):void
    {
    }
}

Как это можно было сделать? Я готов использовать MXML, если потребуется, но на самом деле я пытаюсь избежать чего-то вроде создания двух отдельных объектов WebService, которые используют один и тот же WSDL. Спасибо!


person Panzercrisis    schedule 04.01.2013    source источник


Ответы (1)


Попробуйте сделать так:

var operation:Operation = new Operation(webService, 'noName'); // mx.rpc.soap.mxml.Operation
operation.addEventListener(ResultEvent.RESULT, onResult);
operation.addEventListener(FaultEvent.Fault, onFault);
webService.operations['noName']=operation;
person user1875642    schedule 04.01.2013
comment
Вроде в основном работает, но у меня тут ошибка. event.fault.faultString == [MessagingError message = 'Пункт назначения MessageAgent должен быть настроен для отправки сообщений.']. Я пока вижу только неясные ссылки на то, как решить эту проблему. - person Panzercrisis; 07.01.2013