我的Flex应用程序中有WebService,支持多个操作。我正在尝试使用相同的webservice实例进行这些操作。但是一旦我使用不同的操作,我就会从服务器返回故障。在网络监视器中检查时,我看到SoapAction HTTP Header永远不会更新到第二个操作所需的那个。根据adobe文档,这应该是可能的,但似乎并不适合我。我的代码如下。如果有人能指出解决方案,那将会非常有帮助。
// main.mxml
public var ws:WebService;
public var op1:CallResponder = new CallResonder();
public var op2:CallResponder = new CallResonder();
// triggered on creationComplete Event
public function initWebsvc()
{
ws = new WebService();
ws.loadWsdl("http://www.examplesvc.com/test.asmx?wsdl");
}
protected function submit_ClickEventHandler(event:MouseEvent):void
{
op1.addEventListener(ResultEvent.RESULT, op1_resultHandler);
op1.token = ws.operation1();
}
protected function op1_resultHandler(event:ResultEvent):void
{
op2.addEventListener(ResultEvent.RESULT, op2_resultHandler);
op2.token = ws.operation2(); // This fails
}
protected function op2_resultHandler(event:ResultEvent):void
{
Alert.show("SUCCESS");
}
答案 0 :(得分:0)
我认为这是因为有两个WebService实现。一个在mx.rpc.soap中实现,另一个在mx.rpc.soap.mxml中实现。第二个不仅实现了IMXMLObject接口(在MXML中正确使用它),还提供了并发等附加功能(就像所有rpc服务一样)。
背后的想法是,在MXML定义的服务只是一个实例,它将被重用。你不能实例化更多的实例。在ActionScript中,您可能会创建大量实例。
因此,在ActionScript中使用Web服务时,请使用mx.rpc.soap.mxml实现并将并发属性设置为“multiple”。