2 // DuplexSessionChannelBase.cs
5 // Marcos Cobena (marcoscobena@gmail.com)
7 // Copyright 2007 Marcos Cobena (http://www.youcannoteatbits.org/)
11 using System.ServiceModel.Channels;
13 namespace System.ServiceModel.Channels
15 internal abstract class DuplexChannelBase : ChannelBase, IDuplexChannel
17 ChannelFactoryBase channel_factory_base;
18 ChannelListenerBase channel_listener_base;
19 EndpointAddress local_address;
20 EndpointAddress remote_address;
23 public DuplexChannelBase (ChannelFactoryBase factory, EndpointAddress remoteAddress, Uri via) : base (factory)
25 channel_factory_base = factory;
26 remote_address = remoteAddress;
30 public DuplexChannelBase (ChannelListenerBase listener) : base (listener)
32 channel_listener_base = listener;
35 public abstract EndpointAddress LocalAddress { get; }
37 public EndpointAddress RemoteAddress {
38 get { return remote_address; }
45 public virtual IAsyncResult BeginSend (Message message, AsyncCallback callback, object state)
47 return BeginSend (message, this.DefaultSendTimeout, callback, state);
50 public abstract IAsyncResult BeginSend (Message message, TimeSpan timeout, AsyncCallback callback, object state);
52 public abstract void EndSend (IAsyncResult result);
54 public virtual void Send (Message message)
56 Send (message, this.DefaultSendTimeout);
59 public virtual void Send (Message message, TimeSpan timeout)
61 EndSend (BeginSend (message, timeout, null, null));
64 public virtual IAsyncResult BeginReceive (AsyncCallback callback, object state)
66 return BeginReceive (this.DefaultReceiveTimeout, callback, state);
69 public abstract IAsyncResult BeginReceive (TimeSpan timeout, AsyncCallback callback, object state);
71 public abstract IAsyncResult BeginTryReceive (TimeSpan timeout, AsyncCallback callback, object state);
73 public abstract IAsyncResult BeginWaitForMessage (TimeSpan timeout, AsyncCallback callback, object state);
75 public abstract Message EndReceive (IAsyncResult result);
77 public abstract bool EndTryReceive (IAsyncResult result, out Message message);
79 public abstract bool EndWaitForMessage (IAsyncResult result);
81 public virtual Message Receive ()
83 return Receive (this.DefaultReceiveTimeout);
86 public virtual Message Receive (TimeSpan timeout)
88 return EndReceive (BeginReceive (timeout, null, null));
91 public virtual bool TryReceive (TimeSpan timeout, out Message message)
93 return EndTryReceive (BeginTryReceive (timeout, null, null), out message);
96 public virtual bool WaitForMessage (TimeSpan timeout)
98 return EndWaitForMessage (BeginWaitForMessage (timeout, null, null));