本篇随笔主要是关于Flex与asp.net的WebService通讯,其中利用了SoapHeader
ASP.NET的WebService代码
1
using System;
2
3
using System.Web;
4
5
using System.Web.Services;
6
7
using System.Web.Services.Protocols;
8
9
[WebService(Namespace = "http://davidfan.cnblogs.com")]//名称空间应该和Flex中定义相同
10
11
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
12
13
public class Service : System.Web.Services.WebService
14
15
{
16
17
public ValidateSoapHeader header;
18
19
[WebMethod]
20
21
[SoapHeader("header")]
22
23
public string HelloWorld()
24
25
{
26
27
if (header == null)
28
29
{
30
31
return "请提供验证信息.";
32
33
}
34
35
else
36
37
{
38
39
if (header.Name == "admin" && header.Password == "admin")
40
41
{
42
43
if (header.ExDate < DateTime.Now)
44
45
{
46
47
return "帐号过期";
48
49
}
50
51
else
52
53
{
54
55
return "验证成功";
56
57
}
58
59
}
60
61
else
62
63
{
64
65
return "用户名或密码错误";
66
67
}
68
69
}
70
71
}
72
73
}
74
75
/**//// <summary>
76
77
/// 继承自SoapHeader的自定义类
78
79
/// </summary>
80
81
public class ValidateSoapHeader : System.Web.Services.Protocols.SoapHeader
82
83
{
84
85
public ValidateSoapHeader()
86
87
{
88
89
}
90
91
public ValidateSoapHeader(string name, string password, DateTime dt)
92
93
{
94
95
this.name = name;
96
97
this.password = password;
98
99
this.exDate = dt;
100
101
}
102
103
private string name;
104
105
public string Name
106
107
{
108
109
get { return name; }
110
111
set { name = value; }
112
113
}
114
115
private string password;
116
117
public string Password
118
119
{
120
121
get { return password; }
122
123
set { password = value; }
124
125
}
126
127
private DateTime exDate;
128
129
public DateTime ExDate
130
131
{
132
133
get { return exDate; }
134
135
set { exDate = value; }
136
137
}
138
139
}
140
Flex的mxml、as代码 
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

mxml:
1
<?xml version="1.0" encoding="utf-8"?>
2
3
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontFamily="simsun" fontSize="12">
4
5
6
<mx:Script>
7
8
<
10
import WebServiceUtility.Info;
11
12
import mx.rpc.events.FaultEvent;
13
14
import mx.rpc.events.ResultEvent;
15
16
import mx.rpc.soap.SOAPHeader;
17
18
19
20
private function SendRequest():void
21
22
{
23
24
var content:Info = new Info();
25
26
content.Name = UserName.text;
27
28
content.Password = PassWord.text;
29
30
content.ExDate = new Date(2010, 3, 10);
31
32
//关键在QName的构造函数
33
34
//第一个参数要和.Net的WebService的名称空间相同
35
36
//第二个参数要和.Net的WebService的继承自SoapHeader的自定义类名称相同
37
38
var qname:QName = new QName("http://davidfan.cnblogs.com","ValidateSoapHeader");
39
40
var header:SOAPHeader = new SOAPHeader(qname,content);
41
42
43
44
ws.clearHeaders();
45
46
ws.addHeader(header);
47
48
ws.HelloWorld();
49
50
}
51
52
private function OnResult(event:ResultEvent):void{
53
54
Result.text= event.result.toString();
55
56
}
57
58
private function OnFault(event:FaultEvent):void{
59
60
Result.text= event.message.toString();
61
62
}
63
64
]]>
65
66
</mx:Script>
67
68
<mx:WebService id="ws" wsdl="http://localhost:9200/WebSite2/Service.asmx?WSDL"
69
70
result="OnResult(event)" fault="OnFault(event)"/>
71
72
<mx:TextInput id="UserName" x="98" y="94"/>
73
74
<mx:TextInput id="PassWord" x="98" y="124"/>
75
76
<mx:Label x="29" y="98" text="用户名:"/>
77
78
<mx:Label x="29" y="128" text="密 码:"/>
79
80
<mx:Button x="98" y="184" label="调用" click="SendRequest()"/>
81
82
<mx:Label x="29" y="156" text="结 果:"/>
83
84
<mx:TextInput id="Result" x="98" y="154"/>
85
86
</mx:Application>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

as:
1
package WebServiceUtility
2
3
{
4
5
public class Info{
6
7
//该类名称可以和.Net中的ValidateSoapHeader不同
8
9
//但字段要对应拼写相同
10
11
public var Name:String;
12
13
public var Password:String;
14
15
public var ExDate:Date;
16
17
}
18
19
}
20

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
