Question

I created a really simple WCF service, but for some reason, I am having an issue with svcutil. I am using the following command:

svcutil http://localhost:8098/IceVSServer/service?wsdl

I am getting the following output:

Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.1]
Copyright (c) Microsoft Corporation.  All rights reserved.

Attempting to download metadata from 'http://localhost:8098/IceVsServer/service?wsdl' using WS-Metadata Exchange or DISCO.
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.1]
Copyright (c) Microsoft Corporation.  All rights reserved.

Error: Cannot obtain Metadata from http://localhost:8098/IceVsServer/service?wsdl

If this is a Windows (R) Communication Foundation service to which you have acce
ss, please check that you have enabled metadata publishing at the specified addr
ess.  For help enabling metadata publishing, please refer to the MSDN documentat
ion at http://go.microsoft.com/fwlink/?LinkId=65455.


WS-Metadata Exchange Error
    URI: http://localhost:8098/IceVsServer/service?wsdl

    Metadata contains a reference that cannot be resolved: 'http://localhost:8098/IceVsServer/service?wsdl'.

There was no endpoint listening at http://localhost:8098/IceVsServer/service
?wsdl that could accept the message. This is often caused by an incorrect addres
s or SOAP action. See InnerException, if present, for more details.

The remote server returned an error: (404) Not Found.


HTTP GET Error
    URI: http://localhost:8098/IceVsServer/service?wsdl

There was an error downloading 'http://localhost:8098/IceVsServer/service?wsdl'.

The request failed with HTTP status 404: Not Found.

If you would like more help, type "svcutil /?"

The error would seem to indicate I have no MEX endpoint. I do though and in fact, if I put the URL into my browser, the XML comes right up.

Here is my app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="IceVSService.IceVsService" behaviorConfiguration="IceVsServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8098/IceVsService/service"/>
          </baseAddresses>
        </host>
        <!-- this endpoint is exposed at the base address provided by host: http://localhost:8098/IceVsService/service  -->
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="IceVSService.IIceVersioningSystem" />
        <!-- the mex endpoint is explosed at http://localhost:8098/IceVsService/service/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="IceVsServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
Was it helpful?

Solution

You are confusing HttpGet with Mex. These are 2 different ways of publishing the service details - "metadata exchange format" (MEX) or in the "web service description language" (WSDL).

in your config you have defined both; however you havent defined httpgeturl attribute therefore it will be treated like the empty string. so your wsdl address will be: http://localhost:8098/IceVsService/service?wsdl and not http://localhost:8098/IceVsServer/service (IceVsServer isnt defined anywhere).

Your mex address will also work with svcutil: http://localhost:8098/IceVsService/service/mex

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top