void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter,
                                                 WsdlEndpointConversionContext context)
        {
            var soap_binding = new WS.Soap12Binding();

            soap_binding.Transport = "http://schemas.microsoft.com/soap/tcp";
            soap_binding.Style     = WS.SoapBindingStyle.Document;
            context.WsdlBinding.Extensions.Add(soap_binding);

            var address = context.Endpoint.Address;
            var uri     = address.Uri.AbsoluteUri;

            var soap_address = new WS.Soap12AddressBinding();

            soap_address.Location = uri;
            context.WsdlPort.Extensions.Add(soap_address);

            var doc          = new XmlDocument();
            var endpoint_ref = doc.CreateElement(
                "EndpointReference", AddressingVersion.WSAddressing10.Namespace);
            var endpoint_addr = doc.CreateElement(
                "Address", AddressingVersion.WSAddressing10.Namespace);

            endpoint_addr.InnerText = uri;
            endpoint_ref.AppendChild(endpoint_addr);
            context.WsdlPort.Extensions.Add(endpoint_ref);
        }
Пример #2
0
        private void AddMinimum(
            WSD.ServiceDescription wsdl,
            string contractName,
            OperationDescriptionCollection operations,
            ServiceEndpoint endpoint)
        {
            // Absolut minimum in order to provide a WSDL
            var portType =
                new WSD.PortType
            {
                Name = contractName
            };

            wsdl.PortTypes.Add(portType);
            var address =
                new WSD.Soap12AddressBinding
            {
                Location = endpoint.Address.ToString()
            };
            var port =
                new WSD.Port
            {
                Name = contractName
            };

            port.Extensions.Add(address);
            var service =
                new WSD.Service
            {
                Name = wsdl.Name
            };

            service.Ports.Add(port);
            wsdl.Services.Add(service);
        }
Пример #3
0
        bool ImportNetTcpEndpoint(WsdlEndpointConversionContext context)
        {
            var tcp = context.Endpoint.Binding as NetTcpBinding;

            if (tcp == null)
            {
                return(false);
            }

            WS.Soap12AddressBinding address = null;
            foreach (var extension in context.WsdlPort.Extensions)
            {
                var check = extension as WS.Soap12AddressBinding;
                if (check != null)
                {
                    address = check;
                    break;
                }
            }

            if (address == null)
            {
                return(false);
            }

            context.Endpoint.Address       = new EndpointAddress(address.Location);
            context.Endpoint.ListenUri     = new Uri(address.Location);
            context.Endpoint.ListenUriMode = ListenUriMode.Explicit;
            return(true);
        }
        static WsdlNS.SoapAddressBinding CreateSoapAddressBinding(EnvelopeVersion version, WsdlNS.Port wsdlPort)
        {
            WsdlNS.SoapAddressBinding soapAddressBinding = null;

            if (version == EnvelopeVersion.Soap12)
            {
                soapAddressBinding = new WsdlNS.Soap12AddressBinding();
            }
            else if (version == EnvelopeVersion.Soap11)
            {
                soapAddressBinding = new WsdlNS.SoapAddressBinding();
            }
            Fx.Assert(soapAddressBinding != null, "EnvelopeVersion is not recognized. Please update the SoapHelper class");

            wsdlPort.Extensions.Add(soapAddressBinding);
            return(soapAddressBinding);
        }
Пример #5
0
        public static void NetTcpBinding(
            TestContext context, MetadataSet doc, SecurityMode security,
            bool reliableSession, TransferMode transferMode, TestLabel label)
        {
            label.EnterScope("netTcpBinding");

            var sd = (WS.ServiceDescription)doc.MetadataSections [0].Metadata;

            label.EnterScope("wsdl");

            label.EnterScope("bindings");
            Assert.That(sd.Bindings.Count, Is.EqualTo(1), label.Get());
            var binding = sd.Bindings [0];

            Assert.That(binding.ExtensibleAttributes, Is.Null, label.Get());
            Assert.That(binding.Extensions, Is.Not.Null, label.Get());

            WS.Soap12Binding soap = null;
            XmlElement       xml  = null;

            foreach (var ext in binding.Extensions)
            {
                if (ext is WS.Soap12Binding)
                {
                    soap = (WS.Soap12Binding)ext;
                }
                else if (ext is XmlElement)
                {
                    xml = (XmlElement)ext;
                }
            }

            CheckSoapBinding(soap, "http://schemas.microsoft.com/soap/tcp", label);

            label.EnterScope("policy-xml");
            Assert.That(xml, Is.Not.Null, label.Get());
            var assertions = AssertPolicy(sd, xml, label);

            Assert.That(assertions, Is.Not.Null, label.Get());
            AssertPolicy(assertions, BinaryEncodingQName, label);
            AssertPolicy(assertions, UsingAddressingQName, label);
            if (transferMode == TransferMode.Streamed)
            {
                AssertPolicy(assertions, StreamedTransferQName, label);
            }
            switch (security)
            {
            case SecurityMode.Message:
                AssertPolicy(assertions, SymmetricBindingQName, label);
                AssertPolicy(assertions, Wss11QName, label);
                AssertPolicy(assertions, Trust10QName, label);
                break;

            case SecurityMode.Transport:
                AssertPolicy(assertions, TransportBindingQName, label);
                break;

            case SecurityMode.TransportWithMessageCredential:
                AssertPolicy(assertions, TransportBindingQName, label);
                AssertPolicy(assertions, EndorsingSupportingQName, label);
                AssertPolicy(assertions, Wss11QName, label);
                AssertPolicy(assertions, Trust10QName, label);
                break;

            default:
                break;
            }
            if (reliableSession)
            {
                AssertPolicy(assertions, ReliableSessionQName, label);
            }
            Assert.That(assertions.Count, Is.EqualTo(0), label.Get());
            label.LeaveScope();

            label.EnterScope("services");
            Assert.That(sd.Services, Is.Not.Null, label.Get());
            Assert.That(sd.Services.Count, Is.EqualTo(1), label.Get());
            var service = sd.Services [0];

            Assert.That(service.Ports, Is.Not.Null, label.Get());
            Assert.That(service.Ports.Count, Is.EqualTo(1), label.Get());
            var port = service.Ports [0];

            label.EnterScope("port");
            Assert.That(port.Extensions, Is.Not.Null, label.Get());
            Assert.That(port.Extensions.Count, Is.EqualTo(2), label.Get());

            WS.Soap12AddressBinding soap_addr_binding = null;
            XmlElement port_xml = null;

            foreach (var extension in port.Extensions)
            {
                if (extension is WS.Soap12AddressBinding)
                {
                    soap_addr_binding = (WS.Soap12AddressBinding)extension;
                }
                else if (extension is XmlElement)
                {
                    port_xml = (XmlElement)extension;
                }
                else
                {
                    Assert.Fail(label.Get());
                }
            }
            Assert.That(soap_addr_binding, Is.Not.Null, label.Get());
            Assert.That(port_xml, Is.Not.Null, label.Get());
            Assert.That(port_xml.NamespaceURI, Is.EqualTo(Wsa10Namespace), label.Get());
            Assert.That(port_xml.LocalName, Is.EqualTo("EndpointReference"), label.Get());
            label.LeaveScope();
            label.LeaveScope();

            label.LeaveScope();              // wsdl

            var importer = new WsdlImporter(doc);

            label.EnterScope("bindings");
            var bindings = importer.ImportAllBindings();

            CheckImportErrors(importer, label);
            Assert.That(bindings, Is.Not.Null, label.Get());
            Assert.That(bindings.Count, Is.EqualTo(1), label.Get());

            CheckNetTcpBinding(
                bindings [0], security, reliableSession,
                transferMode, label);
            label.LeaveScope();

            label.EnterScope("endpoints");
            var endpoints = importer.ImportAllEndpoints();

            CheckImportErrors(importer, label);
            Assert.That(endpoints, Is.Not.Null, label.Get());
            Assert.That(endpoints.Count, Is.EqualTo(1), label.Get());

            CheckEndpoint(endpoints [0], MetadataSamples.NetTcpUri, label);
            label.LeaveScope();

            label.LeaveScope();
        }