Flex calls WebService2 (Based on. net) and flexwebservice2
There are many methods for flex to access WebService, using"Data/service"The function can automatically generate a proxy class to access WebService. This prevents all data access from being written to the MXML page for reuse. At the same time, you can directly import custom data types to the background, this facilitates parameter passing.
Directly run the code: the WebService Interface
?
1234567891011121314151617181920212223242526 |
namespace MyNetWebService { /// <summary> /// Summary of MyWebService /// </summary> [WebService(Namespace = "http://tempuriTemp.org/" )] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem( false )] // To allow ASP. net ajax to call this Web service from a script, cancel the comments to the downstream. // [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); } } } |
Add a WebService:
Connection data/service-> Web Service-> wsdl url: Enter the service address (http: // localhost/XXX/MyWebService. asmx? WSDL)
Use"Data/service"Proxy class generated by the function under services:
Imported webService methods and custom types under data/service
Automatically generate a proxy class _ Super_MyWebService.as to access WebService
/** * 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; } }}
Automatically generate the proxy class MyWebService. as for accessing WebService
/** * 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 terminal 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> <! -- Reference css styles --> <fx: Style source = "css/style.css"/> <fx: Declarations> <! -- Place non-visual elements (such as services and value objects) Here --> <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 = "Call 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>
Running result: