Fix binding for MexHttps
authorAndrey Grishin <agrishin@aligntech.com>
Wed, 18 Jul 2012 09:55:09 +0000 (13:55 +0400)
committerAndrey Grishin <agrishin@aligntech.com>
Wed, 18 Jul 2012 09:55:09 +0000 (13:55 +0400)
mcs/class/System.ServiceModel/System.ServiceModel.Description/MetadataExchangeBindings.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/MetadataExchangeBindingsTest.cs

index 89fd2b3a0bb9025f326268f9c195169268d056db..ddaa133ec63ff972d15d0272f6367f53b60b5269 100644 (file)
@@ -42,9 +42,9 @@ namespace System.ServiceModel.Description
 
                public static Binding CreateMexHttpsBinding ()
                {
-                       var b = (WSHttpBinding) CreateMexHttpBinding ();
-                       b.Name = "MetadataExchangeHttpsBinding";
-                       b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
+                       var b = new WSHttpBinding(SecurityMode.Transport) {
+                               Name = "MetadataExchangeHttpsBinding",
+                               Namespace = "http://schemas.microsoft.com/ws/2005/02/mex/bindings"};
                        return b;
                }
 
index e98edc82d22ce9bedb133eda49d84f01c71612e6..8f0be289fda52f3862bce040258dfe6cf38f76b3 100644 (file)
@@ -78,7 +78,37 @@ namespace MonoTests.System.ServiceModel.Description
                                host.Close ();
                        }
                }
-               
+
+               [Test]
+               public void CreateMexHttpsBinding()
+               {
+                       var b = MetadataExchangeBindings.CreateMexHttpsBinding() as WSHttpBinding;
+                       Assert.IsNotNull(b, "#1");
+                       Assert.AreEqual(SecurityMode.Transport, b.Security.Mode, "#2");
+                       Assert.IsFalse(b.TransactionFlow, "#3");
+                       Assert.IsFalse(b.ReliableSession.Enabled, "#4");
+                       Assert.IsFalse(b.CreateBindingElements().Any(be => be is SecurityBindingElement), "#b1");
+                       Assert.IsTrue(b.CreateBindingElements().Any(be => be is TransactionFlowBindingElement), "#b2");
+                       Assert.IsFalse(b.CreateBindingElements().Any(be => be is ReliableSessionBindingElement), "#b3");
+                       Assert.IsTrue(new TransactionFlowBindingElement().TransactionProtocol == TransactionProtocol.Default, "#x1");
+                       Assert.AreEqual(MessageVersion.Soap12WSAddressing10, b.MessageVersion, "#5");
+                       Assert.AreEqual(MessageVersion.Soap12WSAddressing10, b.GetProperty<MessageVersion>(new BindingParameterCollection()), "#6");
+                       Assert.AreEqual(Uri.UriSchemeHttps, b.Scheme, "#8");
+
+                       var host = new ServiceHost(typeof(MetadataExchange));
+                       host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpsBinding(), CreateUri("https://localhost:8080"));
+                       host.Open();
+                       try
+                       {
+                               // it still does not rewrite MessageVersion.None. It's rather likely ServiceMetadataExtension which does overwriting.
+                               Assert.AreEqual(MessageVersion.Soap12WSAddressing10, ((ChannelDispatcher)host.ChannelDispatchers[0]).MessageVersion, "#7");
+                       }
+                       finally
+                       {
+                               host.Close();
+                       }
+               }
+
                public class MetadataExchange : IMetadataExchange
                {
                        public Message Get (Message request)