[tools] Fixup 098de0b8, inadvertently deleted the wrong csproj
[mono.git] / mcs / tools / svcutil / how-client-proxy-is-created.txt
1 -- From this service contract ... ----------------------------------------------
2
3
4 [ServiceContract]
5 interface IFoo
6 {
7         [OperationContract]
8         BazType BarOper (...);
9 }
10
11
12 -- A client like this is created (interface types too, which are simple) -------
13
14
15
16 public class FooClient : ClientBase<IFoo>, IFoo {
17
18 public .ctor()
19 public .ctor(string)
20 public .ctor(Binding,EndpointAddress)
21 public .ctor(string,EndpointAddress)
22 public .ctor(string,string)
23 public void BarOperAsync(...)
24 public void BarOperAsync(..., object userState)
25 {
26         if (onBeginBarOperDelegate == null)
27                 onBeginBarOperDelegate = new BeginOperationDelegate (OnBeginBarOper)
28         if (onEndBarOperDelegate == null)
29                 onEndBarOperDelegate = new EndOperationDelegate (OnEndBarOper)
30         if (onBarOperCompletedDelegate == null)
31                 onBarOperCompletedDelegate = new SendOrPostCallback (OnBarOperCompleted);
32         InvokeAsync (onBeginBarOperDelegate, new object [] {arg1, arg2, ...}, onEndBarOperDelegate, onBarOperCompletedDelegate, userState);
33 }
34 protected IFoo CreateChannel() [ml]
35 IAsyncResult IFoo.BeginBarOper(..., AsyncCallback, object)
36 {
37         return base.BeginInvoke ("BarOper", new object [] {arg1, arg2, ...}, callback, state);
38 }
39 BazType IFoo.EndBarOper(IAsyncResult , out ...)
40 {
41         object [] ret = EndInvoke ("BarOper", result);
42         /*optionally*/ outArg1 = ret [1]; outArg2 = ret [2] ...
43         return (BazType) ret [0];
44 }
45 private void OnBarOperCompleted(object state)
46 {
47         if (BarOperCompleted != null) {
48                 var args = (InvokeAsyncCompletedEventArgs) state;
49                 BarOperCompleted (new BarOperCompletedEventArgs (args.Results, args.Error, args.Cancelled, args.UserState));
50         }
51 }
52 private IAsyncResult OnBeginBarOper(object [] inValues, AsyncCallback, object)
53 {
54         var arg1 = inValues [0]; var arg2 = inValues [1]; ...
55         return BeginBarOper (arg1, arg2, ..., callback, state);
56 }
57 private object [] OnEndBarOper(IAsyncResult)
58 {
59         xxx outarg1;
60         yyy outarg2;
61         ...
62         var ret = EndBarOper (result, out outarg1, out outarg2, ...);
63         return new object [] {ret, outarg1, outarg2...};
64 }
65 public event EventHandler<BarOperCompletedEventArgs> BarOperCompleted
66 private SendOrPostCallback onBarOperCompletedDelegate
67 private ClientBase<IFoo>.BeginOperationDelegate onBeginBarOperDelegate
68 private ClientBase<IFoo>.EndOperationDelegate onEndBarOperDelegate
69
70 public class BarOperCompletedEventArgs : AsyncCompletedEventArgs
71 {
72         public BarOperCompletedEventArgs (object [] results, Exception ex, bool cancelled, object userState)
73         {
74                 this.results = results;
75         }
76         object [] results;
77         public BazType Result { get { (BazType) results [0]; } }
78 }
79
80 }