2016-07-11 2 views
0

У меня очень странная проблема с клиентским/серверным приложением с 3 уровнями с WCF.Невозможно получить доступ к WCF, размещенному в службе Windows

Во-первых, у меня есть служебные окна, в которых размещаются службы WCF в basicHttpBinding. Это сервер app.config:

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
     <services> 
      <service name="Business.BSServiceManagement" behaviorConfiguration="myServiceBehave"> 
       <host> 
        <baseAddresses> 
         <add baseAddress="http://localhost:35001"/> 
        </baseAddresses> 
       </host> 
       <endpoint address="/Clients" binding="basicHttpBinding" name="Clients" contract="Contracts.BusinessFacade.IBFClientManagement"/> 
       <endpoint address="/Users" binding="basicHttpBinding" name="Users" contract="Contracts.BusinessFacade.IBFUserManagement"/> 
       <endpoint address="/Licences" binding="basicHttpBinding" name="Licences" contract="Contracts.BusinessFacade.IBFLicenceManagement"/> 
      </service> 
     </services> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="myServiceBehave"> 
        <serviceMetadata httpGetEnabled="true"/> 
        <serviceDebug includeExceptionDetailInFaults="true"/> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
    </system.serviceModel> 
</configuration> 

Эта услуга развертывается на сервере в DMZ и у меня есть доступ с моего компьютера (в Firefox, если я кладу адрес службы с номером порта)

Во-вторых, У меня есть клиентское приложение, сделанное с winforms, которые используют сервис с ChannelFactory.

Это клиент app.config:

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
     <client> 
      <endpoint address="http://192.168.128.1:35001/Clients" binding="basicHttpBinding" name="Clients" contract="Contracts.BusinessFacade.IBFClientManagement"/> 
      <endpoint address="http://192.168.128.1:35001/Users" binding="basicHttpBinding" name="Users" contract="Contracts.BusinessFacade.IBFUserManagement"/> 
      <endpoint address="http://192.168.128.1:35001/Licences" binding="basicHttpBinding" name="Licences" contract="Contracts.BusinessFacade.IBFLicenceManagement"/> 
     </client> 
    </system.serviceModel> 
</configuration> 

Когда я отладки клиентского приложения, все работает отлично. Так что я сделал проект установки для развертывания приложения на нескольких компьютерах, но когда я исполню ехе приложения (установленные или непосредственно в бен/выпуска), у меня есть сообщение об ошибке, как это:

There was no endpoint listening at http://192.168.128.1:35001/Users... 

Внутреннее исключение говорит :

Невозможно подключиться к удаленному серверу

Я попытался добавить MEX конечной точки, изменение номера порта, проверить сервер и клиент брандмауэр компьютера, я не понимаю, где проблема.

Благодарим за помощь.

EDIT 1:

После нескольких тестов у меня такая же проблема в версии ехе, но не в отладочном ехе.

Если я выполняю debug exe, все работает нормально, но release exe возвращает сообщение об ошибке.

+0

Попытка понять вашу конфигурацию отладки. Ваш узел baseAddress является «localhost» - это служба, работающая локально на вашей машине разработки? – leetibbett

+0

Нет, я установил службу на другой компьютер в DMZ, и я выполняю только клиент для отладки на моей машине и работает отлично. Но когда я устанавливаю клиент на свою машину, он не работает – user1069516

+0

VS обычно работает как администратор, а что, если вы выполняете свой клиент как администратор? Вы добавили настройки брандмауэра для клиента exe? – leetibbett

ответ

0

Проблема с вашим обслуживанием.

Убедитесь, что служба запущена и работает.

После запуска службы просмотрите URL-адрес (например: localhost: 8080/example), чтобы убедиться, что служба работает нормально.

При добавлении ссылки на службу к вашему клиентскому приложению она автоматически генерирует конечные точки в файле app.config.

При добавлении проекта-клиента к клиенту убедитесь, что он успешно завершен.

Когда вы его устанавливаете, он должен работать на вас.

+0

Все ваши вопросы в порядке, но я не добавляю Service Reference в мое клиентское приложение, я использую ChannelFactory – user1069516

+0

Определите <адрес конечной точки> внутри в файле конфигурации службы. В клиентском приложении определите адрес конечной точки в классе, а не файл конфигурации. ex: EndpointAddress address = new EndpointAddress ("http: // localhost: 1212/example"); завод = новый DuplexChannelFactory (ctx, привязка, адрес); – venkk

+0

Это должно сработать. – venkk

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