Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WCF hosting: Can access svc file but cannot go to wsdl link

Tags:

wsdl

wcf

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.

like image 798
Selcuk Sasoglu Avatar asked Jan 20 '10 09:01

Selcuk Sasoglu


3 Answers

had the same problem. i fixed it by adding httpsGetEnabled to serviceBehaviors>behavior like this:

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>

maybe it helps someone else. dont think that u need this hint after 4years =)

like image 114
ich2211 Avatar answered Oct 19 '22 02:10

ich2211


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 .

like image 29
marc_s Avatar answered Oct 19 '22 03:10

marc_s


I know that answer it's so late but I had the same problem and the solution was:

Add tags [ServiceContract] and [OperationContract] on interface that it is implemented on service .svc. Visual Studio create interface when you select WCF Service but I deleted the interface and I created my own interface.

[ServiceContract]
public interface IService1
{
    [OperationContract]
    void DoWork();
}

I hope to help somebody.

like image 3
Rodolfo Luna Avatar answered Oct 19 '22 03:10

Rodolfo Luna