Search code examples
wcfweb-services

Cannot access WCF service remotely


BACKGROUND

We have a WCF web service hosted in a Windows Service running with the basicHttpBinding.

PROBLEM

Browsing to the service URL on the local machine works fine, but trying to browse using the external IP address (either remotely or EVEN locally) does not work. Example:

http://localhost:8000/booking.svc (OK)

http://<external-IP>:8000/booking.svc (Not OK)

APP.CONFIG

<system.serviceModel>

    <services>
      <service behaviorConfiguration="DefaultServiceBehavior" name="HotelManagementSystem.ServiceHost.BookingService">
        <endpoint address="" binding="basicHttpBinding" contract="HotelManagementSystem.ServiceHost.IBookingService" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/booking.svc" />
          </baseAddresses>
        </host>
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>

Anyone have any ideas?


Solution

  • Try using useRequestHeadersForMetadataAddress

    <system.serviceModel>
      <behaviors>
        <serviceBehaviors>
          <behavior>
            <useRequestHeadersForMetadataAddress />
          </behavior>
        </serviceBehaviors>
      </behaviors>
    </system.serviceModel>
    

    This will allow the service to insert the URI you used to access the service in to the metadata so the wsdl aligns. Sometimes you'll go to access http://1.2.3.4/service.svc but the metadata will reference http://localhost. Locally that's fine, but remotely that makes grabbing the endpoint information impossible. Instead, now all those localhost references will use 1.2.3.4 instead.