tags:

views:

472

answers:

2

Hello,

I have a WCF service that is hosted in IIS 7.5. I have two servers, one for test and one for production.

The service works fine on test server, but on the production server I have the following error.

When I access the address http//..../service.svc I can see the default page that says:


You have created a service.

To test this service, you will need to create a client and use it to call the service. You can do this using the svcutil.exe tool from the command line with the following syntax:

svcutil.exe http://..../service.svc?wsdl

This will generate a configuration file and a code file that contains the client class. Add the two files to your client application and use the generated client class to call the Service.


But when I click the wsdl link, I cannot go to the wsdl page. It returns me to this default web page without any errors. I am suspecting a network/firewall authorization error but does anybody have an experience like this one?

All IIS settings are the same for test and production servers.

Thank you, Best Regards.

A: 

You basically need three things to enable browsing to your WSDL for a WCF service:

  1. a service behavior which enables service metadata
  2. set the httpGetEnabled=True on that service metadata behavior to allow http browsing to that metadata
  3. a mex endpoint on your service

So your config on the server side might looks something like this (plus a bit more stuff):

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MetadataBehavior">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <services>
      <service behaviorConfiguration="MetadataBehavior" name="YourService">
        <endpoint address="" 
                  binding="basicHttpBinding" 
                  contract="IYourService" />
        <endpoint address="mex" 
                  binding="mexHttpBinding" 
                  contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

Points 1 and 2 are handled by this line here:

<serviceMetadata httpGetEnabled="true" />

You need to reference that service behavior in your <service> tag for it to become active.

Point 3 (MEX endpoint) is this section here:

<endpoint address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange" />

For http, use the mexHttpBinding, and the IMetadataExchange contract is a WCF system contract for metadata exchange .

marc_s
I agree. All these configurations were correctly set.I forgot to mention an important detail: the service works fine on my test server, but this error came up when I deployed the service to my production server. Sorry for the inconvenience.
Impulse
A: 

Hi Impulse,

We are also having the same issue. It would be great if you can share the solution with us.

Anish