17:
18:
如上面的配置片斷所示,我們定義了一個與服務端相匹配的客戶端終結點,該終結點上應用了一個WebHttpBehavior終結點行為。WebHttpBehavior可以說是整個Web HTTP編程模型的核心,絕大部分針對Web的支持都是通過該行為實現的。實際上服務端終結點通過WebServiceHost應用了這個終結點行為。
1: using(ChannelFactory
2: {
3: IEmployees proxy = channelFactory.CreateChannel();
4:
5: Console.WriteLine("所有員工列表:");
6: Array.ForEach
7:
8: Console.WriteLine("\n添加一個新員工(003):");
9: proxy.Create(new Employee
10: {
11: Id = "003",
12: Name = "王五",
13: Grade = "G9",
14: Department = "行政部"
15: });
16: Array.ForEach
17:
18: Console.WriteLine("\n修改員工(003)信息:");
19: proxy.Update(new Employee
20: {
21: Id = "003",
22: Name = "王五",
23: Grade = "G11",
24: Department = "銷售部"
25: });
26: Array.ForEach
27: Console.WriteLine("\n刪除員工(003)信息:");
28:
29: proxy.Delete("003");
30: Array.ForEach
31: }
服務調用程序如上所示,我們模擬了員工的添加、修改和刪除。程序之后會在客戶端控制臺產生如下的輸出。
所有員工列表:
1: 所有員工列表:
2: ID: 001 姓名: 張三 級別: G7 部門: 開發部
3: ID: 002 姓名: 李四 級別: G6 部門: 人事部
4:
5: 添加一個新員工(003):
6: ID: 001 姓名: 張三 級別: G7 部門: 開發部
7: ID: 002 姓名: 李四 級別: G6 部門: 人事部
8: ID: 003 姓名: 王五 級別: G9 部門: 行政部
9:
10: 修改員工(003)信息:
11: ID: 001 姓名: 張三 級別: G7 部門: 開發部
12: ID: 002 姓名: 李四 級別: G6 部門: 人事部
13: ID: 003 姓名: 王五 級別: G11 部門: 銷售部
14:
15: 刪除員工(003)信息:
16: ID: 001 姓名: 張三 級別: G7 部門: 開發部
17: ID: 002 姓名: 李四 級別: G6 部門: 人事部
從編程角度來看,我們采用與SOAP服務完全一樣的服務調用方式,那么如何反映出服務調用基于Web的本質呢?首先,之前我們能夠通過瀏覽器訪問GetAll和Get兩個操作可以證明這兩個服務操作是基于HTTP-GET的,返回的數據直接以單純的XML返回,并沒有封裝成SOAP。為了證明Create、Update和Delete也是完全基于Web的,我們可以通過Fiddler來分析HTTP請求的內容。
如下所示的三段XML片斷分別對應著針對上述三個服務操作調用的HTTP請求消息,從這我們可以看出它們就是單純的針對PUT、POST和DELETE方法的HTTP請求,而傳輸給服務端的數據直接作為消息的主體,并沒有封裝成SOAP消息。
1: Create:
2: PUT http://jinnan-pc:3721/employees/ HTTP/1.1
3: Content-Type: application/xml; charset=utf-8
4: Host: jinnan-pc:3721
5: Content-Length: 187
6: Expect: 100-continue
7: Accept-Encoding: gzip, deflate
8:
9:
10:
11: Update:
12: POST http://jinnan-pc:3721/employees/ HTTP/1.1
13: Content-Type: application/xml; charset=utf-8
14: Host: jinnan-pc:3721
15: Content-Length: 186
16: Expect: 100-continue
17: Accept-Encoding: gzip, deflate
18:
19:
20:
21: Delete:
22: DELETE http://jinnan-pc:3721/employees/003 HTTP/1.1
23: Content-Type: application/xml; charset=utf-8
24: Host: jinnan-pc:3721