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 下生成的代理类:

flex 调用WebService2(基于.net)        flex 调用WebService2(基于.net)

数据/服务 下 导入了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 >

 运行结果:

你可能感兴趣的:(webservice)