2013-08-13 3 views
2

ФОНне удается получить доступ к службе WCF удаленно

У нас есть веб-службы WCF размещенного в Windows Service работает с BasicHttpBinding.

ПРОБЛЕМА

просмотр в URL службы на локальной машине работает нормально, но при попытке просмотреть с помощью внешнего IP-адреса (удаленно или даже локально) не работает. Пример:

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

http://<external-IP>:8000/booking.svc (не ОК)

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> 

Кто-нибудь есть какие-нибудь идеи?

+0

Брандмауэр? Вы добавили исключение в порт 8000 на сервере? – Anuraj

+0

В дополнение к брандмауэру добавление записи для 'baseAddress =" http: // external-ip: 8000/booking.svc' позволяет вам подключиться? (Мне повезло с использованием 'useRequestHeadersForMetadataAddress') –

+0

@Anuraj , Я сказал клиенту, что порт 8000 был открыт – Matt

ответ

4

useRequestHeadersForMetadataAddress Попробуйте использовать

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

Это позволит сервису вставить URI вы использовали для доступа к службе в метаданным так WSDL, должны совпадать. Иногда вы будете обращаться к http://1.2.3.4/service.svc, но метаданные будут ссылаться на http://localhost. Локально это нормально, но удаленно, что делает невозможным захват информации о конечной точке. Вместо этого теперь все эти localhost ссылки будут использовать вместо 1.2.3.4.

+0

Аккуратный трюк - мне нужно передать это моим товарищам по команде. , но довольно полезный ответ. – Tim

Смежные вопросы