flash9/flash cs3(as3)通过soap访问Web Services (.net)
1
flash9/flash cs3(as3)通过soap访问Web Services
2
来源:Roading's blog 作者:roading 2007-07-17 【大 中小】
3![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
下面是as3访问Web Services的原理和过程,包括实例和源文件,已经经过了测试(http://www.roading.net/WebService/as3_soap.swf)![](https://www.cnblogs.com/Images/dot.gif)
5![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
前段时间写了 使用flash9(as3)连接webservice,结果发现这种以http post方法访问WebServices只能在测试环境下使用.然后就写了flash9/as3访问WebService的暂时替代方法,当然这是无奈之举,找不到合适的方法前先使用中转的方法来代替.
7![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
但是还是需要找到真正的解决方法,昨天在翻看flash8的mx\services包的时候,在包里面的SOAPCall和PendingCall类里面有整个的访问方法.
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
在SOAPCall类里面有request和response两个对象,分别是提交数据和返回数据.
11![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
下面是节选SOAPCall类的asyncInvoke方法的一部分,实现request的构造和数据发送(这里是流程,具体实现细节在PendingCall类里面):
13![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
//callback是PendingCall的实例.
16
callback.encode();
17![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
callback.callbackMethod = callbackMethod; // Callback method
19![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
// Populate parameters
21
callback.setupParams(args);
22![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
// prepare response object
24
var response = new XML();
25
response.ignoreWhite = true;
26
response.callback = callback;
27
response._startTimeMark = startTime;
28![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
callback.response = response;
31![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
// create the async response mechanism
33
response.onData = function(src)
34
{
35
}
36
// fire message
37
callback.request.sendAndLoad(this.endpointURI, response, "POST");
38
//-------------------------------------------------------------------------------------------
39![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
看到上面的代码,就会豁然开朗,就是使用soap协议,来提交和获取数据.那么,我们就可以很简单的构成一个SOAP 请求.我们看一下soap请求的格式(http://roading.net/WebService/test.asmx?op=say):
42
下面是一个 SOAP 请求和响应示例。所显示的占位符需要由实际值替换。
43![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
POST /WebService/test.asmx HTTP/1.1
46
Host: roading.net
47
Content-Type: text/xml; charset=utf-8
48
Content-Length: length
49
SOAPAction: "http://www.roading.net/say"
50![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
<?xml version="1.0" encoding="utf-8"?>
52
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
53
<soap:Body>
54
<say xmlns="http://www.roading.net/">
55
<str>string</str>
56
</say>
57
</soap:Body>
58
</soap:Envelope>
59![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
60![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
61
一个soap请求包括头部和数据.
62
soap请求头部包括:
63![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
64![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
65
POST /WebService/test.asmx HTTP/1.1
66
Host: roading.net
67
Content-Type: text/xml; charset=utf-8
68
Content-Length: length
69
SOAPAction: http://www.roading.net/say
70![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
71![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
72
URLRequestHeader不支持post,host和Content-Length(ArgumentError: Error #2096: HTTP 请求标头 host 不能通过 ActionScript 设置。),同时也不必要,必须设置的是Content-Type和SOAPAction.
73![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
74![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
75
//
76
r.requestHeaders.push(new URLRequestHeader("Content-Type", "text/xml;charset=utf-8"));
77
r.requestHeaders.push(new URLRequestHeader("SOAPAction", "http://www.roading.net/say"));
78
//
79![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
80![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
81
soap请求数据为:
82![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
83![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
84
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
85
<say xmlns="http://www.roading.net/"> //调用方法.. 命名空间
86
<str>hello</str> //参数
87
</say>
88
</soap:Envelope>
89![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
90![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
91
整个的soap请求如上面所示
就可以使用URLLoader和URLRequest类来发送和接收数据了.下面是一个完整的调用WebServices的测试代码(不包括解析接收的数据):
92![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
93![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
94
//WebService网址(为测试写的例子) http://www.roading.net/WebService/test.asmx
95
import flash.net.*;
96
var soap:Namespace = new Namespace("http://schemas.xmlsoap.org/soap/envelope/");
97![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
98
var r:URLRequest = new URLRequest("http://www.roading.net/WebService/Test.asmx?op=say");
99
r.method = URLRequestMethod.POST;
100
r.requestHeaders.push(new URLRequestHeader("Content-Type", "text/xml;charset=utf-8"));
101
r.requestHeaders.push(new URLRequestHeader("SOAPAction", "http://www.roading.net/say"));
102![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
103![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
104
var rXML:XML =
105
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
106
<soap:Body/>
107
</soap:Envelope>
108
;
109
110
rXML.soap::Body.appendChild(
111
<say xmlns="http://www.roading.net/"> //
112
<str>hello</str> //
113
</say>
114
);
115![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
116
r.data = rXML;
117![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
118
var l:URLLoader = new URLLoader();
119
l.dataFormat = URLLoaderDataFormat.TEXT;
120
l.load(r);
121![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
122
l.addEventListener("ioError" ,err);
123
l.addEventListener(Event.COMPLETE,xmlLoaded);
124
function xmlLoaded(d)
125
{
126
trace(l.data);
127
t.text = l.data;
128
}
129![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
130
function err(e)
131
{
132
trace(e);
133
}
134![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/dot.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
90
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
91
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/dot.gif)
92
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
93
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
94
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
95
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
96
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
97
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
98
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
99
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
100
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
101
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
102
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
103
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
104
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
105
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
106
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
107
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
108
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
109
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
110
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
111
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
112
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
113
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
114
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
115
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
116
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
117
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
118
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
119
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
120
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
121
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
122
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
123
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
124
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
125
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
126
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
128
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
129
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
130
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
131
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
132
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
134
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)