Flex(Flash Builder) 消费 asp.net WebService

Service1.asmx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

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

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

        [WebMethod]
        public double Calc(double radius)
        {
            double d= radius * radius * Math.PI;
            return d;
        }
    }
}

前台Flex调用:

_Super_Service1.as

/**
 * This is a generated class and is not intended for modfication.  To customize behavior
 * of this service wrapper you may modify the generated sub-class of this class - Service1.as.
 */
package services.service1
{
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;

[ExcludeClass]
internal class _Super_Service1 extends com.adobe.fiber.services.wrapper.WebServiceWrapper
{
     
    // Constructor
    public function _Super_Service1()
    {
        // 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, "Calc");
		 operation.resultType = Number; 		 
        operations["Calc"] = 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 = "Service1";
        _serviceControl.port = "Service1Soap";
        wsdl = "http://localhost:3856/Service1.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 'Calc' 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 Calc(radius:Number) : mx.rpc.AsyncToken
	{
		model_internal::loadWSDLIfNecessary();
		var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("Calc");
		var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(radius) ;

		return _internal_token;
	}   
	 
}

}

界面文件:

TestWebServiceAspNet.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" width="797" height="512" xmlns:service1="services.service1.*">
	<s:layout>
		<s:BasicLayout/>
	</s:layout>
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			
			protected function btnGetResult_clickHandler(event:MouseEvent):void
			{
				CalcResult.token = service1.Calc(parseFloat( this.txtRadius.text));				
			}
			
			
			protected function button_clickHandler(event:MouseEvent):void
			{
				HelloWorldResult.token = service1.HelloWorld();
			}
			
		]]>
	</fx:Script>
	<fx:Declarations>		
		<service1:Service1 id="service1" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
		<s:CallResponder id="CalcResult"/>
		<s:CallResponder id="HelloWorldResult"/>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<s:Panel x="20" y="24" width="331" height="203" title="计算圆的面积">
		<s:Button x="69" y="99" label="计算" id="btnGetResult" click="btnGetResult_clickHandler(event)"/>
		<s:TextInput x="69" y="25" id="txtRadius"/>
		<s:Label x="34" y="25" text="半径:"/>
		<s:Label x="36" y="69" text="结果:"/>
		<s:Label x="71" y="69" id="lblResult" text="{CalcResult.lastResult}"/>
	</s:Panel>
	<s:Panel x="375" y="24" width="300" height="203" title="SayHello">
		<s:Button x="117" y="102" label="按钮" id="button" click="button_clickHandler(event)"/>
		<s:Label x="94" y="63" text="{HelloWorldResult.lastResult}"/>
	</s:Panel>
</s:Application>

posted @ 2011-06-08 12:37  庚武  Views(631)  Comments(0Edit  收藏  举报