瀏覽代碼

Merge pull request #2374 from lambdageek/dev/bug-37035

[WCF] ServiceHost should look for inherited ServiceBehaviorAttribute
Aleksey Kliger (λgeek) 10 年之前
父節點
當前提交
5c7b6ea220

+ 1 - 1
mcs/class/System.ServiceModel/System.ServiceModel/ServiceHost.cs

@@ -151,7 +151,7 @@ namespace System.ServiceModel
 
 		TAttr PopulateAttribute<TAttr> ()
 		{
-			object [] atts = service_type.GetCustomAttributes (typeof (TAttr), false);
+			object [] atts = service_type.GetCustomAttributes (typeof (TAttr), true);
 			return (TAttr) (atts.Length > 0 ? atts [0] : Activator.CreateInstance (typeof (TAttr)));
 		}
 

+ 31 - 1
mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostTest.cs

@@ -353,6 +353,29 @@ namespace MonoTests.System.ServiceModel
 			}
 		}
 
+		[Test]
+		public void InstanceWithSingletonMode_InheritServiceBehavior ()
+		{
+			// # 37035
+
+			var ep = NetworkHelpers.LocalEphemeralEndPoint ().ToString ();
+
+			ChildSingletonService instance = new ChildSingletonService ();
+			ServiceHost host = new ServiceHost (instance);
+
+			host.AddServiceEndpoint (typeof (SingletonService),
+						 new BasicHttpBinding (),
+						 new Uri ("http://" + ep + "/s3"));
+
+			try {
+				host.Open ();
+			} catch (InvalidOperationException ex) {
+				Assert.Fail ("InstanceContextMode was not inherited from parent, exception was: {0}", ex);
+			} finally {
+				host.Close ();
+			}
+		}
+
 		[ServiceContract]
 		interface IBar
 		{
@@ -446,7 +469,14 @@ namespace MonoTests.System.ServiceModel
 		public class SingletonService
 		{
 			[OperationContract]
-			public void Process (string input)
+			public virtual void Process (string input)
+			{
+			}
+		}
+
+		public class ChildSingletonService : SingletonService
+		{
+			public override void Process (string input)
 			{
 			}
 		}