Flex 调用WebService2(基于.net)

    flex 访问WebService的方法有很多种,使用FLEX4中的"数据/服务"功能可以自动生成访问WebService的代理类,这样可以避免把所有的数据访问都写到MXML页面上,便于重复利用,同时可以直接导入后台自定义数据类型,方便传参。

    直接上代码:其中WebService接口

namespace MyNetWebService
{
    /// <summary>
    /// MyWebService 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuriTemp.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    // [System.Web.Script.Services.ScriptService]
    public class MyWebService : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        public Model[] GetDetailResult(SearchParameter parmeter, Staff staff)
        {
            return ModelHelp.GetSaleDetailResult(parmeter, staff);
        }
    }        
}

添加WebService服务:

  连接数据/服务—>Web服务—>WSDL URL:  填写服务地址(http://localhost/XXX/MyWebService.asmx?WSDL) 

使用FLEX4中的"数据/服务"功能 在services 下生成的代理类:

        

数据/服务 下 导入了webService的方法 和 自定义类型

自动生成访问WebService的代理类_Super_MyWebService.as 

/**
 * This is a generated class and is not intended for modification.  To customize behavior
 * of this service wrapper you may modify the generated sub-class of this class - MyWebService.as.
 */
package services.mywebservice
{
import com.adobe.fiber.core.model_internal;
import com.adobe.fiber.services.wrapper.WebServiceWrapper;
import com.adobe.serializers.utility.TypeUtility;
import mx.rpc.AbstractOperation;
import mx.rpc.AsyncToken;
import mx.rpc.soap.mxml.Operation;
import mx.rpc.soap.mxml.WebService;
import valueObjects.DetailSearchParameter;
import valueObjects.Employee;
import valueObjects.Sale;

[ExcludeClass]
internal class _Super_MyWebService extends com.adobe.fiber.services.wrapper.WebServiceWrapper
{
     
    // Constructor
    public function _Super_MyWebService()
    {
        // initialize service control
        _serviceControl = new mx.rpc.soap.mxml.WebService();
        var operations:Object = new Object();
        var operation:mx.rpc.soap.mxml.Operation;

        operation = new mx.rpc.soap.mxml.Operation(null, "HelloWorld");
         operation.resultType = String;
        operations["HelloWorld"] = operation;

        operation = new mx.rpc.soap.mxml.Operation(null, "GetDetailResult");
         operation.resultElementType = valueObjects.Sale;
        operations["GetDetailResult"] = operation;

        _serviceControl.operations = operations;
        try
        {
            _serviceControl.convertResultHandler = com.adobe.serializers.utility.TypeUtility.convertResultHandler;
        }
        catch (e: Error)
        { /* Flex 3.4 and eralier does not support the convertResultHandler functionality. */ }



        _serviceControl.service = "MyWebService";
        _serviceControl.port = "MyWebServiceSoap";
        wsdl = "http://localhost/XXX/MyWebService.asmx?WSDL";
        model_internal::loadWSDLIfNecessary();


        model_internal::initialize();
    }

    /**
      * This method is a generated wrapper used to call the 'HelloWorld' operation. It returns an mx.rpc.AsyncToken whose 
      * result property will be populated with the result of the operation when the server response is received. 
      * To use this result from MXML code, define a CallResponder component and assign its token property to this method's return value. 
      * You can then bind to CallResponder.lastResult or listen for the CallResponder.result or fault events.
      *
      * @see mx.rpc.AsyncToken
      * @see mx.rpc.CallResponder 
      *
      * @return an mx.rpc.AsyncToken whose result property will be populated with the result of the operation when the server response is received.
      */
    public function HelloWorld() : mx.rpc.AsyncToken
    {
        model_internal::loadWSDLIfNecessary();
        var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("HelloWorld");
        var _internal_token:mx.rpc.AsyncToken = _internal_operation.send() ;

        return _internal_token;
    }
     
    /**
      * This method is a generated wrapper used to call the 'GetDetailResult' operation. It returns an mx.rpc.AsyncToken whose 
      * result property will be populated with the result of the operation when the server response is received. 
      * To use this result from MXML code, define a CallResponder component and assign its token property to this method's return value. 
      * You can then bind to CallResponder.lastResult or listen for the CallResponder.result or fault events.
      *
      * @see mx.rpc.AsyncToken
      * @see mx.rpc.CallResponder 
      *
      * @return an mx.rpc.AsyncToken whose result property will be populated with the result of the operation when the server response is received.
      */
    public function GetDetailResult(parmeter:valueObjects.DetailSearchParameter, loginEmp:valueObjects.Employee) : mx.rpc.AsyncToken
    {
        model_internal::loadWSDLIfNecessary();
        var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("GetDetailResult");
        var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(parmeter,loginEmp) ;

        return _internal_token;
    }
     
}

}

 

 自动生成访问WebService的代理类MyWebService.as

/**
 * This is a generated sub-class of _MyWebService.as and is intended for behavior
 * customization.  This class is only generated when there is no file already present
 * at its target location.  Thus custom behavior that you add here will survive regeneration
 * of the super-class. 
 **/
 
package services.mywebservice
{

public class MyWebService extends _Super_MyWebService
{

               
}

}

Flex 端Temp.mxml

   

<?xml version="1.0" encoding="utf-8"?>
<mx:Module  xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" 
            layout="vertical" width="100%" height="100%"
            xmlns:common="common.*"
            xmlns:mywebservice="services.mywebservice.*"
            >
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.soap.WebService;
            import mx.controls.Alert;
            
            protected function btn_call_clickHandler(event:MouseEvent):void
            {
                // TODO Auto-generated method stub
                getresult.token=MyWebService.HelloWorld();
            }
            
            protected function getresult_resultHandler(event:ResultEvent):void
            {
                // TODO Auto-generated method stub
                if(event.result!=null)
                {
                    resultweb.text=event.result as String;
                }
            }

        ]]>    
    </fx:Script>
    <!-- 引用css样式 -->
    <fx:Style source="css/style.css" />
        
    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
        <mywebservice:MyWebService id="MyWebService"  showBusyCursor="true" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"/> 
        <s:CallResponder id="getresult" result="getresult_resultHandler(event)" />
    </fx:Declarations>
    <s:VGroup width="100%" height="100%" paddingLeft="10" paddingRight="10" paddingBottom="10" paddingTop="3">
        <s:HGroup width="100%" verticalAlign="middle">
            
            <mx:Text id="resultweb"/>
            <common:Cbutton id="btn_call" label="调用webService" click="btn_call_clickHandler(event)" />
        </s:HGroup>
        <s:HGroup width="100%" verticalAlign="middle">
            <s:Label verticalAlign="middle" styleName="msgTxtStyle" width="100%" id="msg_label"/>
        </s:HGroup>
    </s:VGroup>
</mx:Module >

 运行结果:

posted @ 2014-04-14 15:31  互联网荒漠  阅读(1238)  评论(1编辑  收藏  举报