TimeSpan default_open_timeout, default_close_timeout;
IChannel channel;
IChannelFactory factory;
+ TimeSpan? operation_timeout = null;
+ ChannelFactory channel_factory;
#region delegates
readonly ProcessDelegate _processDelegate;
ChannelFactory channelFactory, EndpointAddress remoteAddress, Uri via)
: this (endpoint.CreateClientRuntime (null), endpoint.Contract, channelFactory.DefaultOpenTimeout, channelFactory.DefaultCloseTimeout, null, channelFactory.OpenedChannelFactory, endpoint.Binding.MessageVersion, remoteAddress, via)
{
+ channel_factory = channelFactory;
}
public ClientRuntimeChannel (ClientRuntime runtime, ContractDescription contract, TimeSpan openTimeout, TimeSpan closeTimeout, IChannel contextChannel, IChannelFactory factory, MessageVersion messageVersion, EndpointAddress remoteAddress, Uri via)
// default values
AllowInitializationUI = true;
- OperationTimeout = TimeSpan.FromMinutes (1);
if (contextChannel != null)
channel = contextChannel;
}
}
- [MonoTODO]
- public TimeSpan OperationTimeout { get; set; }
+ public TimeSpan OperationTimeout {
+ get { return this.operation_timeout ?? (channel_factory != null ? channel_factory.Endpoint.Binding.SendTimeout : DefaultCommunicationTimeouts.Instance.SendTimeout); }
+ set { this.operation_timeout = value; }
+ }
public IOutputSession OutputSession {
get {
protected override void OnClose (TimeSpan timeout)
{
- DateTime start = DateTime.Now;
if (channel.State == CommunicationState.Opened)
channel.Close (timeout);
}
if (p == parameters)
return retval;
- if (p.Length != parameters.Length)
- throw new InvalidOperationException ();
Array.Copy (p, parameters, p.Length);
return retval;
}
// FIXME: implement ConcurrencyMode check:
// if it is .Single && this instance for a callback channel && the operation is invoked inside service operation, then error.
- DateTime startTime = DateTime.Now;
+ DateTime startTime = DateTime.UtcNow;
OutputChannel.Send (msg, timeout);
- return ((IDuplexChannel) channel).Receive (timeout - (DateTime.Now - startTime));
+ return ((IDuplexChannel) channel).Receive (timeout - (DateTime.UtcNow - startTime));
}
internal IAsyncResult BeginRequest (Message msg, TimeSpan timeout, AsyncCallback callback, object state)