How do I get WSDL file from a running service?

11,331

have you tried localhost:1234/IOrderExecutor/?wsdl

try this it may works

Share:
11,331
Arsen Zahray
Author by

Arsen Zahray

Updated on June 17, 2022

Comments

  • Arsen Zahray
    Arsen Zahray almost 2 years

    Here's how I start my web service:

    try
    {
        //load the shedluer static constructor
        ServiceHost svh = new ServiceHost(typeof(OrderExecutor));
    
        var tcpbinding = new NetTcpBinding(SecurityMode.None);
    
        //remove limits on the max array size
        var httpLocation = "http://" + address + ":1234";
    
        svh.AddServiceEndpoint(typeof(IOrderExecutor), new WSHttpBinding(SecurityMode.None), httpLocation);
    
        ServiceMetadataBehavior smb = svh.Description.Behaviors.Find<ServiceMetadataBehavior>();
    
        if (smb == null)
            smb = new ServiceMetadataBehavior();
    
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
        svh.Description.Behaviors.Add(smb);
    
        // Add MEX endpoint
    
        svh.AddServiceEndpoint(
                    ServiceMetadataBehavior.MexContractName,
                    MetadataExchangeBindings.CreateMexHttpBinding(),
                    httpLocation + "/mex"
                    );
    
    
        svh.Open();
        Console.WriteLine("Service mounted at {0}", httpLocation);
        Console.WriteLine("Press Ctrl+c to exit");
    
        var re = new ManualResetEvent(false);
        re.WaitOne();
        svh.Close();
    }
    catch (Exception e)
    {
        Console.WriteLine("Exception");
        Console.WriteLine(e);
    } 
    

    The service starts and works ok, Visual studio can connect to it and create a working client.

    But, I need a WSDL file to make it inter-operate with PHP.

    I've tried

    http://localhost:1234?wsdl
    http://localhost:1234/IOrderExecutor?wsdl
    http://localhost:1234/IOrderExecutor.wsdl
    

    without any success.

    I've also tried

    svcutil /serviceName:IOrderExecutor order-executor.exe
    

    With following result:

    Warning: Unable to load a service with configName 'IOrderExecutor'. To export
     a service provide both the assembly containing the service type and an executab
    le with configuration for this service.
        Details:Either none of the assemblies passed were executables with configura
    tion files or none of the configuration files contained services with the config
     name 'IOrderExecutor'.
    
    Warning: No metadata files were generated. No service contracts were exported.
     To export a service, use the /serviceName option. To export data contracts, spe
    cify the /dataContractOnly option. This can sometimes occur in certain security
    contexts, such as when the assembly is loaded over a UNC network file share. If
    this is the case, try copying the assembly into a trusted environment and runnin
    g it.
    

    How do I get a WSDL file from a running WCF service?

    • Seng Cheong
      Seng Cheong about 11 years
    • Arsen Zahray
      Arsen Zahray about 11 years
    • Admin
      Admin about 11 years
      @ArsenZahray than is something wrong. "...asmx?wsdl" sould be if you have deployed properly
    • Arsen Zahray
      Arsen Zahray about 11 years
      any idea what could be wrong here?
    • Silvermind
      Silvermind about 11 years
      The wsdl could also be .svc?wsdl instead of .asmx?wsdl and you should use the service name instead of the interface.
    • Arsen Zahray
      Arsen Zahray about 11 years
      I've set httpLocation = "http://" + address + ":1234/myservice"; and tried localhost:1234/myservice.svc?wsdl and localhost:1234/myservice.asmx?wsdl. In both cases I've got 503 (sevice unavaliable). localhost:1234/myservice?wsdl is avaliable and returns empty page
    • Silvermind
      Silvermind about 11 years
      Could you try to only open http://localhost:1234 and then browse to the service listed there?
    • insomnium_
      insomnium_ about 11 years
      Did you tried to use your mex endpoint? MEX = metadata exchange, I could be wrong, but metadata is passed as WSDL. localhost:1234/mex
    • Arsen Zahray
      Arsen Zahray about 11 years
      the service does create mex endpoint. At the end I solved the issue by using visual studio to connect to it and create client endpoint. Among the files for the client endpoint, there was the wdsl file.
  • FDinoff
    FDinoff about 11 years
    How does this answer the question?
  • Bomberlt
    Bomberlt over 10 years
    Whoa, I've tried /wsdl ?wsdl /mex?wsdl /mex/wsdl /basic?wsdl /basic/wsdl (i have two endpoints, <endpoint address="mex" binding="mexHttpBinding" name="Mex" contract="IMetadataExchange" /> and <endpoint address="basic" binding="basicHttpBinding" name="Basic" contract="MyService" />) and didn't tried /?wsdl.. WTF. Thanks for help.