zoukankan      html  css  js  c++  java
  • 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 + '
    ' + 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 >

     运行结果:

  • 相关阅读:
    fedora 20 install skype
    WebsitePanel(wsp)配置详解(安装指南)
    【转】SQL Server 2008下载 (附注册码)
    SQL SERVER树型数据处理时,函数递归调用问题,查询根节点,子节点函数
    150 Opening ASCII mode data connection. FTP连接的PASV和PORT方式
    如何在IIS7上配置 FTP7并使用IIS管理凭据方式进行验证?
    DZ!NT论坛 3.6.711删除用户各种错解决方案
    在虚拟机上安装红帽Linux.5.5.for.x86.服务器版系统(按针对安装oracle 10g作的配置)
    OpenStack Nova 制作 Windows 镜像
    HttpWebRequest访问时,错误:(401)未经授权。
  • 原文地址:https://www.cnblogs.com/ashleyboy/p/3664163.html
Copyright © 2011-2022 走看看