Using the CCR for web service calls
So I figured I would see how the CCR compared the traditional .NET 2.0 Web Service model so I threw together this demo application. The interesting thing is that while I wired up the async call back events first, most of the CCR results arrived first.
Web Service
1 [WebMethod]
2 public string Echo(string message, int sleep)
3 {
4 System.Threading.Thread.Sleep(sleep);
5 return message;
6 }
Test Harness
1 static void Main(string[] args)
2 {
3 int sleeptime = 100;
4
5 //Call using traditional sequential model
6 Console.WriteLine("traditional sequential test");
7 for (int i = 0; i < 5; i++)
8 {
9 using (CCRService.Service1 ws = new CCRServiceTest.CCRService.Service1())
10 {
11 ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
12 Console.WriteLine(ws.Echo(string.Format("Seq Message {0}", i), sleeptime));
13 }
14 }
15
16 //Call using traditional Async Model
17 Console.WriteLine("traditional Async Model test");
18 for (int i = 0; i < 5; i++)
19 {
20 using (CCRService.Service1 ws = new CCRServiceTest.CCRService.Service1())
21 {
22 ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
23 ws.EchoCompleted += new CCRServiceTest.CCRService.EchoCompletedEventHandler(
24 delegate(object sender, CCRServiceTest.CCRService.EchoCompletedEventArgs e)
25 {
26 Console.WriteLine(e.Result);
27 });
28
29 ws.EchoAsync(string.Format("Async Message {0}", i), sleeptime);
30 }
31 }
32
33 //Call using the CCR
34 Console.WriteLine("CCR test");
35 DispatcherQueue dq = new DispatcherQueue();
36 Port<int> work = new Port<int>();
37
38 for (int i = 0; i < 5; i++)
39 {
40 work.Post(i);
41 }
42
43 Arbiter.Activate(dq,
44 Arbiter.Receive(true, work,
45 delegate(int i)
46 {
47 using (CCRService.Service1 ws = new CCRServiceTest.CCRService.Service1())
48 {
49 ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
50 Console.WriteLine(ws.Echo(string.Format("CCR Message {0}", i), sleeptime));
51 }
52 }));
53
54 Console.WriteLine("Done!");
55 Console.ReadKey();
56
57
58 }
Results:
traditional sequential test
Seq Message 0
Seq Message 1
Seq Message 2
Seq Message 3
Seq Message 4
traditional Async Model test
CCR test
Done!
CCR Message 0
CCR Message 1
CCR Message 2
CCR Message 3
Async Message 1
Async Message 2
Async Message 0
Async Message 3
Async Message 4
CCR Message 4