From 3bfba37d2ac3cbe7315b7437d36dba4c295fe1f3 Mon Sep 17 00:00:00 2001 From: Andrey Grishin Date: Wed, 18 Jul 2012 13:55:09 +0400 Subject: [PATCH 1/1] Fix binding for MexHttps --- .../MetadataExchangeBindings.cs | 6 ++-- .../MetadataExchangeBindingsTest.cs | 32 ++++++++++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Description/MetadataExchangeBindings.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Description/MetadataExchangeBindings.cs index 89fd2b3a0bb..ddaa133ec63 100644 --- a/mcs/class/System.ServiceModel/System.ServiceModel.Description/MetadataExchangeBindings.cs +++ b/mcs/class/System.ServiceModel/System.ServiceModel.Description/MetadataExchangeBindings.cs @@ -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; } diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/MetadataExchangeBindingsTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/MetadataExchangeBindingsTest.cs index e98edc82d22..8f0be289fda 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/MetadataExchangeBindingsTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/MetadataExchangeBindingsTest.cs @@ -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(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) -- 2.25.1