Merge pull request #1949 from lewurm/fixtype
[mono.git] / mcs / class / System.ServiceModel / System.ServiceModel / ClientRuntimeChannel.cs
index 043b2ab7af08df3875689382a09e41e1210750f3..36ea57b5b9fd7b6170cc447d46b2da4cc1f19b26 100644 (file)
@@ -67,6 +67,8 @@ namespace System.ServiceModel.MonoInternal
                TimeSpan default_open_timeout, default_close_timeout;
                IChannel channel;
                IChannelFactory factory;
+               TimeSpan? operation_timeout = null;
+               ChannelFactory channel_factory;
 
                #region delegates
                readonly ProcessDelegate _processDelegate;
@@ -86,6 +88,7 @@ namespace System.ServiceModel.MonoInternal
                        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)
@@ -108,7 +111,6 @@ namespace System.ServiceModel.MonoInternal
 
                        // default values
                        AllowInitializationUI = true;
-                       OperationTimeout = TimeSpan.FromMinutes (1);
 
                        if (contextChannel != null)
                                channel = contextChannel;
@@ -322,8 +324,10 @@ namespace System.ServiceModel.MonoInternal
                        }
                }
 
-               [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 {
@@ -457,8 +461,6 @@ namespace System.ServiceModel.MonoInternal
                        if (p == parameters)
                                return retval;
 
-                       if (p.Length != parameters.Length)
-                               throw new InvalidOperationException ();
                        Array.Copy (p, parameters, p.Length);
                        return retval;
                }