首页 > 学院 > 开发设计 > 正文

flex 调用WebService2(基于.net)

2019-11-17 03:13:55
字体:
来源:转载
供稿:网友

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 >

运行结果:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表