Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtsushi Eno <atsushi@ximian.com>2011-04-27 10:41:34 +0400
committerAtsushi Eno <atsushi@ximian.com>2011-04-27 10:41:34 +0400
commit01ad2d49137603af8fdd243e9fe462c53a1c6ffa (patch)
tree581d9d895e8443f0abb67bc0962bb333d1db341e /mcs/class/System.ServiceModel.Discovery
parent064cd53a8d038dcc2d9971e7b307e62ae41ebc7e (diff)
Use FindCritera/ResolveCriteria Duration properties for DiscoveryEndpoint timeout.
Diffstat (limited to 'mcs/class/System.ServiceModel.Discovery')
-rw-r--r--mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Version11/DiscoveryTargetClient11.cs6
-rw-r--r--mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.VersionApril2005/DiscoveryTargetClientApril2005.cs6
-rw-r--r--mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.VersionCD1/DiscoveryTargetClientCD1.cs6
-rw-r--r--mcs/class/System.ServiceModel.Discovery/Test/System.ServiceModel.Discovery/DiscoveryClientBindingElementTest.cs33
4 files changed, 41 insertions, 10 deletions
diff --git a/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Version11/DiscoveryTargetClient11.cs b/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Version11/DiscoveryTargetClient11.cs
index 2ccf43518a1..93c2b207962 100644
--- a/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Version11/DiscoveryTargetClient11.cs
+++ b/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.Version11/DiscoveryTargetClient11.cs
@@ -80,7 +80,8 @@ namespace System.ServiceModel.Discovery.Version11
Channel.EndFind (result);
}, null);
- if (!reply_find_handle.WaitOne (InnerChannel.OperationTimeout))
+ var timeout = InnerChannel.OperationTimeout < criteria.Duration ? InnerChannel.OperationTimeout : criteria.Duration;
+ if (!reply_find_handle.WaitOne (timeout))
throw new EndpointNotFoundException ("The discovery client could not receive Find operation response within the operation timeout.");
try {
var ir = find_completed ();
@@ -118,7 +119,8 @@ namespace System.ServiceModel.Discovery.Version11
Channel.EndResolve (result);
}, null);
- if (!reply_resolve_handle.WaitOne (InnerChannel.OperationTimeout))
+ var timeout = InnerChannel.OperationTimeout < criteria.Duration ? InnerChannel.OperationTimeout : criteria.Duration;
+ if (!reply_find_handle.WaitOne (timeout))
throw new TimeoutException ();
try {
var ir = resolve_completed ();
diff --git a/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.VersionApril2005/DiscoveryTargetClientApril2005.cs b/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.VersionApril2005/DiscoveryTargetClientApril2005.cs
index 1c640b10d33..6f783f1655a 100644
--- a/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.VersionApril2005/DiscoveryTargetClientApril2005.cs
+++ b/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.VersionApril2005/DiscoveryTargetClientApril2005.cs
@@ -80,7 +80,8 @@ namespace System.ServiceModel.Discovery.VersionApril2005
Channel.EndFind (result);
}, null);
- if (!reply_find_handle.WaitOne (InnerChannel.OperationTimeout))
+ var timeout = InnerChannel.OperationTimeout < criteria.Duration ? InnerChannel.OperationTimeout : criteria.Duration;
+ if (!reply_find_handle.WaitOne (timeout))
throw new EndpointNotFoundException ("The discovery client could not receive Find operation response within the operation timeout.");
try {
var ir = find_completed ();
@@ -118,7 +119,8 @@ namespace System.ServiceModel.Discovery.VersionApril2005
Channel.EndResolve (result);
}, null);
- if (!reply_resolve_handle.WaitOne (InnerChannel.OperationTimeout))
+ var timeout = InnerChannel.OperationTimeout < criteria.Duration ? InnerChannel.OperationTimeout : criteria.Duration;
+ if (!reply_find_handle.WaitOne (timeout))
throw new TimeoutException ();
try {
var ir = resolve_completed ();
diff --git a/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.VersionCD1/DiscoveryTargetClientCD1.cs b/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.VersionCD1/DiscoveryTargetClientCD1.cs
index b36c7fc9e09..7d1f9b4c60b 100644
--- a/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.VersionCD1/DiscoveryTargetClientCD1.cs
+++ b/mcs/class/System.ServiceModel.Discovery/System.ServiceModel.Discovery.VersionCD1/DiscoveryTargetClientCD1.cs
@@ -80,7 +80,8 @@ namespace System.ServiceModel.Discovery.VersionCD1
Channel.EndFind (result);
}, null);
- if (!reply_find_handle.WaitOne (InnerChannel.OperationTimeout))
+ var timeout = InnerChannel.OperationTimeout < criteria.Duration ? InnerChannel.OperationTimeout : criteria.Duration;
+ if (!reply_find_handle.WaitOne (timeout))
throw new EndpointNotFoundException ("The discovery client could not receive Find operation response within the operation timeout.");
try {
var ir = find_completed ();
@@ -118,7 +119,8 @@ namespace System.ServiceModel.Discovery.VersionCD1
Channel.EndResolve (result);
}, null);
- if (!reply_resolve_handle.WaitOne (InnerChannel.OperationTimeout))
+ var timeout = InnerChannel.OperationTimeout < criteria.Duration ? InnerChannel.OperationTimeout : criteria.Duration;
+ if (!reply_find_handle.WaitOne (timeout))
throw new TimeoutException ();
try {
var ir = resolve_completed ();
diff --git a/mcs/class/System.ServiceModel.Discovery/Test/System.ServiceModel.Discovery/DiscoveryClientBindingElementTest.cs b/mcs/class/System.ServiceModel.Discovery/Test/System.ServiceModel.Discovery/DiscoveryClientBindingElementTest.cs
index e7aa00d6ef6..26083822660 100644
--- a/mcs/class/System.ServiceModel.Discovery/Test/System.ServiceModel.Discovery/DiscoveryClientBindingElementTest.cs
+++ b/mcs/class/System.ServiceModel.Discovery/Test/System.ServiceModel.Discovery/DiscoveryClientBindingElementTest.cs
@@ -145,32 +145,57 @@ namespace MonoTests.System.ServiceModel.Discovery
Assert.AreEqual (DiscoveryClientBindingElement.DiscoveryEndpointAddress, ch.RemoteAddress, "#1");
}
- // This test takes a while, so I in fact don't want to enable it ...
+ class MyDiscoveryEndpointProvider2 : DiscoveryEndpointProvider
+ {
+ public MyDiscoveryEndpointProvider2 (DiscoveryEndpoint endpoint)
+ {
+ this.endpoint = endpoint;
+ }
+
+ DiscoveryEndpoint endpoint;
+
+ public override DiscoveryEndpoint GetDiscoveryEndpoint ()
+ {
+ return endpoint;
+ }
+ }
+
[Test]
[ExpectedException (typeof (EndpointNotFoundException))]
public void RequestChannelOpenFails ()
{
var be = new DiscoveryClientBindingElement ();
+ // Note that this explicitly sets shorter timeout than open timeout for the channel.
+ // If it is longer, then TimeoutException will occur instgead,
+ // as the client doesn't expect longer than FindCriteria.Duration.
+ be.FindCriteria.Duration = TimeSpan.FromSeconds (3);
+
var bc = new BindingContext (new CustomBinding (be, new HttpTransportBindingElement ()), new BindingParameterCollection ());
var cf = be.BuildChannelFactory<IRequestChannel> (bc);
cf.Open ();
Assert.IsNull (cf.GetProperty<DiscoveryEndpoint> (), "#1");
var ch = cf.CreateChannel (DiscoveryClientBindingElement.DiscoveryEndpointAddress);
Assert.IsNull (ch.GetProperty<DiscoveryEndpoint> (), "#2");
- ch.Open (TimeSpan.FromSeconds (80));
+ DateTime start = DateTime.Now;
+ ch.Open (TimeSpan.FromSeconds (5));
+ Assert.IsTrue (DateTime.Now - start < TimeSpan.FromSeconds (15), "It is likely that FindCriteria.Duration is ignored");
}
- // This test takes a while, so I in fact don't want to enable it ...
[Test]
[ExpectedException (typeof (EndpointNotFoundException))]
public void RequestChannelOpenFails2 ()
{
var be = new DiscoveryClientBindingElement ();
+ // (The comment on RequestChannelOpenFails() applies here too.)
+ be.FindCriteria.Duration = TimeSpan.FromSeconds (3);
+
var bc = new BindingContext (new CustomBinding (be, new TcpTransportBindingElement ()), new BindingParameterCollection ());
var cf = be.BuildChannelFactory<IDuplexSessionChannel> (bc);
cf.Open ();
var ch = cf.CreateChannel (DiscoveryClientBindingElement.DiscoveryEndpointAddress);
- ch.Open (TimeSpan.FromSeconds (80));
+ DateTime start = DateTime.Now;
+ ch.Open (TimeSpan.FromSeconds (5));
+ Assert.IsTrue (DateTime.Now - start < TimeSpan.FromSeconds (15), "It is likely that FindCriteria.Duration is ignored");
}
[Test]