Click here to Skip to main content
15,860,972 members
Articles / Programming Languages / C#

WCF Support for WSDL 2.0

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
12 Feb 2011CPOL3 min read 43.7K   454   5   5
A command line utility to generate WCF proxies from WSDL 2.0 documents.

Introduction

Windows Communication Foundation (WCF) is Microsoft's latest SOAP stack (and more). A SOAP stack enables programmers to work with their favorite programming model - classes - instead of manually handcrafting SOAP messages. WCF generates these classes from a WSDL, which is a metadata file each Web Service exposes with the list of operations it supports and their schema. WCF only knows to generate classes (proxy) out of WSDL 1.0 documents.

In this article, I show how to extend WCF so that it will generate classes from WSDL 2.0 documents as well.

Background

A major requirement from many Web Service is to support interoperability. This means that clients from various platforms should be able to access the Web Service. A key to that is the ability of the various platforms to generate proxies, such that instead of handcrafting SOAP, like this (highly simplified):

XML
<Envelope>
   <Body>
 
      <AddUser>
         <Name>Yaron</Name>
         <Blog>http://webservices20.blogspot.com/</Blog>
         <Books>
             <Book>
                 <Name>My First book</Name>
             </Book>

            ...
         </Books>
    </AddUser>

  </Body> 
</Envelope>

the developer can work with classes like this:

C#
public class User 
{
    string Name;
    Uri Blog;
    Book[] Books;
}

Isn't it nicer? A SOAP stack can generate such a class, provided that the Web Service exposes a WSDL file. This file contains all of the metadata required in order to generate the code. Here is a (tiny) sample from a WSDL:

XML
<s:element name="EchoString">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" 
                      name="s" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
...

<WSDL:message name="EchoStringSoapIn">
    <WSDL:part name="parameters" element="tns:EchoString" />
  </WSDL:message>

...

<WSDL:operation name="EchoString">
      <WSDL:input message="tns:EchoStringSoapIn" />
      <WSDL:output message="tns:EchoStringSoapOut" />
</WSDL:operation>

This WSDL adheres to WSDL version 1.0, which is the prevalent version. The newer version, WSDL 2.0, is not so common. Will it ever be? Will it fulfill the promise to be the REST and SOAP services' next generation metadata? This interesting discussion is out of the scope of this article. If you are interested, read some of it in this blog.

Many SOAP stacks only support generating clients from WSDL 1.0 documents. WCF is one of them. If you try to author a WCF client to a service that uses WSDL 2.0, this can be a real pain.

In this article, I show how to consume WSDL 2.0 documents with WCF.

Using the code

  1. Download the latest version of svcutil2.exe, either from the source attached to this article, or from the CodePlex project page.
  2. Open the VS command console or otherwise make sure the original svcutil.exe is in the current path (usually located in C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin).
  3. Use svcutil2 exactly like you use svcutil:
$> svcutil2.exe http://WSDL2WSDL.cloudapp.net/WSDL/simple2.WSDL

You can also use any of the svcutil known flags.

Implementation

Writing code generation for WSDL is a complex task. I chose to use a different approach: I utilized the fact that WCF already knows to generate code from WSDL 1.0 documents, so I convert WSDL 2.0 documents to WSDL 1.0 and give them to WCF to process. svcutil2 is based on the same code base as WSDL2WSDL, which is an online WSDL2 → WSDL1 converter utility.

The bits and bytes of the actual conversion are quite exhausting, but you are welcome to investigate the WSDL2WSDLConverter.cs class for the full details.

Points of interest

Some readers may ask what is the use of WSDL 2.0 anyway, if it can be reduced to a WSDL 1.0 document. The truth is that WSDL 2.0 has a lot more than WSDL 1.0, but for SOAP stacks, most of the new stuff is not relevant. Some of it is, and I had to either use creative ways to solve it or to leave it as a limitation in this version. One example is interface inheritance which is currently not supported.

Links

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Israel Israel
Web services interoperability expert.

http://webservices20.blogspot.com/

Comments and Discussions

 
Question:) ;) :( :rolleyes: :mad: :| :java: Pin
Member 1102589620-Nov-15 1:57
Member 1102589620-Nov-15 1:57 
QuestionTrouble using the code for juddi wsdl containing null namespace Pin
Lothar Behrens2-Feb-14 0:02
professionalLothar Behrens2-Feb-14 0:02 
Hi,

I have the following WSDL from an Apache UDDI Service (juddi) that is running in a WSO2 Governance Registry application.

I hope my code snippets are included Smile | :)

After modifying the code to cope with some null reference exceptions and not able to handle fault types, I was able to convert the wsdl2 file and I got a file. Basically I have downloaded the wsdl2 file and converted it to a string in wsdl format not using a web server. That way I simply got the file.

I hope, you can help me. Here is the modified code for svcutil2 (I skip the fixes for the converter for now):

C#
namespace svcutil2
{
    public static class CertIgnore
    {
        public static void SetCertificatePolicy()
        {
            ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;
        }

        private static bool RemoteCertificateValidate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
        {
            return true;
        }
    }


    class Program
    {
        private static XmlDocument DownloadWsdl2Xml(string url)
        {
            var b = new WebClient().DownloadData(url);
            var wsdl2 = new XmlDocument();
            wsdl2.Load(new MemoryStream(b));
            return wsdl2;
        }

        public static void Main(string[] args)
        {
            CertIgnore.SetCertificatePolicy();

            Console.WriteLine("");
            Console.WriteLine("Generated by wsdl2wsdl");
            Console.WriteLine("Yaron Naveh http://webservices20.blogspot.com/");
            Console.WriteLine("=============================================");
            Console.WriteLine("");

            try
            {
                var doc = DownloadWsdl2Xml(args[0]);

                doc.DocumentElement.SetAttribute("xmlns:null", "http://tempuri.org");

                doc.Save(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"service.wsdl2"));

                Wsdl2WsdlConverter converter = new Wsdl2WsdlConverter();

                string wsdl1 = converter.ConvertToString(doc);

                using (StreamWriter outfile = new StreamWriter(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"service.wsdl")))
                {
                    outfile.Write(wsdl1.Replace("\0", ""));
                }
            }
            finally
            {
            }


            Console.WriteLine("");
            Console.WriteLine("=============================================");
            Console.WriteLine("Generated by wsdl2wsdl");
            Console.WriteLine("Yaron Naveh http://webservices20.blogspot.com/");
            Console.WriteLine("");
        }
    }
}


When I try to use svcutil with the converted file, I get an error.

Error from svcutil:

C:\Q\develop\Projects\ReferenzProjekte\svcutil2\trunk\svcutil2\bin\x86\Debug>svc
util service.wsdl /language:C#
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.17929]
Copyright (c) Microsoft Corporation. Alle Rechte vorbehalten.

Fehler: wsdl:portType kann nicht importiert werden.
Detail: Beim Ausführen einer WSDL-Importerweiterung wurde eine Ausnahme ausgelös
t: System.ServiceModel.Description.DataContractSerializerMessageContractImporter

Fehler: Das Schema mit dem Zielnamespace "http://tempuri.org" wurde nicht gefund
en.
XPath zur Fehlerquelle: //wsdl:definitions[@targetNamespace='urn:uddi-org:v3_ser
vice']/wsdl:portType[@name='ServiceInterface']


Fehler: wsdl:binding kann nicht importiert werden.
Detail: Beim Importieren von wsdl:portType, der Grundlage für wsdl:binding, ist
ein Fehler aufgetreten.
XPath zu wsdl:portType: //wsdl:definitions[@targetNamespace='urn:uddi-org:v3_ser
vice']/wsdl:portType[@name='ServiceInterface']
XPath zur Fehlerquelle: //wsdl:definitions[@targetNamespace='urn:uddi-org:v3_ser
vice']/wsdl:binding[@name='UDDIPublicationServiceSoap11Binding']


Fehler: wsdl:port kann nicht importiert werden.
Detail: Beim Importieren von wsdl:binding, der Grundlage für wsdl:port, ist ein
Fehler aufgetreten.
XPath zu wsdl:binding: //wsdl:definitions[@targetNamespace='urn:uddi-org:v3_serv
ice']/wsdl:binding[@name='UDDIPublicationServiceSoap11Binding']
XPath zur Fehlerquelle: //wsdl:definitions[@targetNamespace='urn:uddi-org:v3_ser
vice']/wsdl:service[@name='UDDIPublicationService']/wsdl:port[@name='UDDIPublica
tionImplPort']


Dateien werden generiert...
Warnung: Es wurde kein Code generiert.
Wenn Sie versucht haben, einen Client zu generieren, könnte die Ursache hierfür
sein, dass die Metadatendokumente keine gültigen Verträge oder Dienste enthielte
n
oder dass erkannt wurde, dass sich alle Verträge/Dienste in /reference-Assemblys
 befinden. Stellen Sie sicher, dass alle Metadatendokumente an das Tool übergebe
n wurden.

Warnung: Wenn Datenverträge aus Schemas generiert werden sollen, müssen Sie sich
erstellen, dass die Option /dataContractOnly verwendet wird.


The wsdl2 file is as follows:
XML
<wsdl2:description xmlns:wsdl2="http://www.w3.org/ns/wsdl" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:tns="urn:uddi-org:v3_service" xmlns:wsoap="http://www.w3.org/ns/wsdl/soap" xmlns:wrpc="http://www.w3.org/ns/wsdl/rpc" xmlns:wsdlx="http://www.w3.org/ns/wsdl-extensions" xmlns:whttp="http://www.w3.org/ns/wsdl/http" targetNamespace="urn:uddi-org:v3_service" xmlns:null="http://tempuri.org">
  <wsdl2:types />
  <wsdl2:interface name="ServiceInterface">
    <wsdl2:fault name="dispositionReport" element="#none" />
    <wsdl2:operation name="save_tModel" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:save_tModel" wsaw:Action="save_tModel" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:save_tModelResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:save_tModeldispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="delete_binding" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:delete_binding" wsaw:Action="delete_binding" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:delete_bindingResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:delete_bindingdispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="delete_business" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:delete_business" wsaw:Action="delete_business" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:delete_businessResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:delete_businessdispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="add_publisherAssertions" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:add_publisherAssertions" wsaw:Action="add_publisherAssertions" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:add_publisherAssertionsResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:add_publisherAssertionsdispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="save_service" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:save_service" wsaw:Action="save_service" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:save_serviceResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:save_servicedispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="set_publisherAssertions" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="#none" wsaw:Action="set_publisherAssertions" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:set_publisherAssertionsResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:set_publisherAssertionsdispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="delete_publisherAssertions" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:delete_publisherAssertions" wsaw:Action="delete_publisherAssertions" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:delete_publisherAssertionsResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:delete_publisherAssertionsdispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="get_publisherAssertions" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="#none" wsaw:Action="get_publisherAssertions" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:get_publisherAssertionsResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:get_publisherAssertionsdispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="delete_service" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:delete_service" wsaw:Action="delete_service" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:delete_serviceResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:delete_servicedispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="save_binding" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:save_binding" wsaw:Action="save_binding" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:save_bindingResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:save_bindingdispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="save_business" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:save_business" wsaw:Action="save_business" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:save_businessResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:save_businessdispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="get_registeredInfo" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:get_registeredInfo" wsaw:Action="get_registeredInfo" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:get_registeredInfoResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:get_registeredInfodispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="get_assertionStatusReport" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="#none" wsaw:Action="get_assertionStatusReport" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:get_assertionStatusReportResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:get_assertionStatusReportdispositionReport" />
    </wsdl2:operation>
    <wsdl2:operation name="delete_tModel" pattern="http://www.w3.org/ns/wsdl/in-out">
      <wsdl2:input element="null:delete_tModel" wsaw:Action="delete_tModel" />
      <wsdl2:output element="#none" wsaw:Action="urn:uddi-org:v3_service:UDDI_Publication_PortType:delete_tModelResponse" />
      <wsdl2:outfault ref="tns:dispositionReport" wsaw:Action="urn:delete_tModeldispositionReport" />
    </wsdl2:operation>
  </wsdl2:interface>
  <wsdl2:binding name="UDDIPublicationServiceSoap11Binding" interface="tns:ServiceInterface" type="http://www.w3.org/ns/wsdl/soap" wsoap:version="1.1" />
  <wsdl2:service name="UDDIPublicationService" interface="tns:ServiceInterface">
    <wsdl2:endpoint name="UDDIPublicationImplPort" binding="tns:UDDIPublicationServiceSoap11Binding" address="http://stsmac.behrens.de:9765/services/UDDIPublicationService.UDDIPublicationImplPort/" />
  </wsdl2:service>
</wsdl2:description>


The result using a namespace like http://tempuri.org I get the following wsdl:

XML
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="urn:uddi-org:v3_service" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="urn:uddi-org:v3_service" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:types />
  <wsdl:message name="save_tModel_in">
    <wsdl:part name="parametere" xmlns:q1="http://tempuri.org" element="q1:save_tModel" />
  </wsdl:message>
  <wsdl:message name="save_tModel_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="delete_binding_in">
    <wsdl:part name="parametere" xmlns:q2="http://tempuri.org" element="q2:delete_binding" />
  </wsdl:message>
  <wsdl:message name="delete_binding_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="delete_business_in">
    <wsdl:part name="parametere" xmlns:q3="http://tempuri.org" element="q3:delete_business" />
  </wsdl:message>
  <wsdl:message name="delete_business_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="add_publisherAssertions_in">
    <wsdl:part name="parametere" xmlns:q4="http://tempuri.org" element="q4:add_publisherAssertions" />
  </wsdl:message>
  <wsdl:message name="add_publisherAssertions_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="save_service_in">
    <wsdl:part name="parametere" xmlns:q5="http://tempuri.org" element="q5:save_service" />
  </wsdl:message>
  <wsdl:message name="save_service_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="set_publisherAssertions_in">
    <wsdl:part name="parametere" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="set_publisherAssertions_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="delete_publisherAssertions_in">
    <wsdl:part name="parametere" xmlns:q6="http://tempuri.org" element="q6:delete_publisherAssertions" />
  </wsdl:message>
  <wsdl:message name="delete_publisherAssertions_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="get_publisherAssertions_in">
    <wsdl:part name="parametere" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="get_publisherAssertions_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="delete_service_in">
    <wsdl:part name="parametere" xmlns:q7="http://tempuri.org" element="q7:delete_service" />
  </wsdl:message>
  <wsdl:message name="delete_service_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="save_binding_in">
    <wsdl:part name="parametere" xmlns:q8="http://tempuri.org" element="q8:save_binding" />
  </wsdl:message>
  <wsdl:message name="save_binding_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="save_business_in">
    <wsdl:part name="parametere" xmlns:q9="http://tempuri.org" element="q9:save_business" />
  </wsdl:message>
  <wsdl:message name="save_business_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="get_registeredInfo_in">
    <wsdl:part name="parametere" xmlns:q10="http://tempuri.org" element="q10:get_registeredInfo" />
  </wsdl:message>
  <wsdl:message name="get_registeredInfo_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="get_assertionStatusReport_in">
    <wsdl:part name="parametere" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="get_assertionStatusReport_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:message name="delete_tModel_in">
    <wsdl:part name="parametere" xmlns:q11="http://tempuri.org" element="q11:delete_tModel" />
  </wsdl:message>
  <wsdl:message name="delete_tModel_out">
    <wsdl:part name="parameters" element="_x0023_none" />
  </wsdl:message>
  <wsdl:portType name="ServiceInterface">
    <wsdl:operation name="save_tModel">
      <wsdl:input message="tns:save_tModel_in" />
      <wsdl:output message="tns:save_tModel_out" />
    </wsdl:operation>
    <wsdl:operation name="delete_binding">
      <wsdl:input message="tns:delete_binding_in" />
      <wsdl:output message="tns:delete_binding_out" />
    </wsdl:operation>
    <wsdl:operation name="delete_business">
      <wsdl:input message="tns:delete_business_in" />
      <wsdl:output message="tns:delete_business_out" />
    </wsdl:operation>
    <wsdl:operation name="add_publisherAssertions">
      <wsdl:input message="tns:add_publisherAssertions_in" />
      <wsdl:output message="tns:add_publisherAssertions_out" />
    </wsdl:operation>
    <wsdl:operation name="save_service">
      <wsdl:input message="tns:save_service_in" />
      <wsdl:output message="tns:save_service_out" />
    </wsdl:operation>
    <wsdl:operation name="set_publisherAssertions">
      <wsdl:input message="tns:set_publisherAssertions_in" />
      <wsdl:output message="tns:set_publisherAssertions_out" />
    </wsdl:operation>
    <wsdl:operation name="delete_publisherAssertions">
      <wsdl:input message="tns:delete_publisherAssertions_in" />
      <wsdl:output message="tns:delete_publisherAssertions_out" />
    </wsdl:operation>
    <wsdl:operation name="get_publisherAssertions">
      <wsdl:input message="tns:get_publisherAssertions_in" />
      <wsdl:output message="tns:get_publisherAssertions_out" />
    </wsdl:operation>
    <wsdl:operation name="delete_service">
      <wsdl:input message="tns:delete_service_in" />
      <wsdl:output message="tns:delete_service_out" />
    </wsdl:operation>
    <wsdl:operation name="save_binding">
      <wsdl:input message="tns:save_binding_in" />
      <wsdl:output message="tns:save_binding_out" />
    </wsdl:operation>
    <wsdl:operation name="save_business">
      <wsdl:input message="tns:save_business_in" />
      <wsdl:output message="tns:save_business_out" />
    </wsdl:operation>
    <wsdl:operation name="get_registeredInfo">
      <wsdl:input message="tns:get_registeredInfo_in" />
      <wsdl:output message="tns:get_registeredInfo_out" />
    </wsdl:operation>
    <wsdl:operation name="get_assertionStatusReport">
      <wsdl:input message="tns:get_assertionStatusReport_in" />
      <wsdl:output message="tns:get_assertionStatusReport_out" />
    </wsdl:operation>
    <wsdl:operation name="delete_tModel">
      <wsdl:input message="tns:delete_tModel_in" />
      <wsdl:output message="tns:delete_tModel_out" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="UDDIPublicationServiceSoap11Binding" type="tns:ServiceInterface">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
  </wsdl:binding>
  <wsdl:service name="UDDIPublicationService">
    <wsdl:port name="UDDIPublicationImplPort" binding="tns:UDDIPublicationServiceSoap11Binding">
      <soap:address location="http://stsmac.behrens.de:9765/services/UDDIPublicationService.UDDIPublicationImplPort/" />
      <soap12:address location="http://stsmac.behrens.de:9765/services/UDDIPublicationService.UDDIPublicationImplPort/" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

AnswerRe: Trouble using the code for juddi wsdl containing null namespace Pin
Yaron Naveh2-Feb-14 4:46
Yaron Naveh2-Feb-14 4:46 
GeneralRe: Trouble using the code for juddi wsdl containing null namespace Pin
Lothar Behrens2-Feb-14 10:13
professionalLothar Behrens2-Feb-14 10:13 
GeneralMy vote of 5 Pin
Patrick Kalkman12-Feb-11 10:31
Patrick Kalkman12-Feb-11 10:31 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.