WCF размещен как служба

#windows #vb.net #wcf #service

#Windows #vb.net #wcf #Обслуживание

Вопрос:

У меня есть VB.NET Служба WCF, размещенная как оконный сервис. Я смог создать установочный пакет, установить службу на свой компьютер и запустить службу вручную из служб в административных средствах.

Теперь, когда я пытаюсь ссылаться на сервис в моем тестовом консольном приложении (адрес:http://localhost:8080 /), я получаю следующую ошибку:

Произошла ошибка при загрузке ‘http://localhost:8080 ‘.`

Не удалось подключиться к удаленному серверу Не удалось установить соединение, поскольку целевая машина активно отказалась от него 127.0.0.1:8080`

Метаданные содержат ссылку, которая не может быть разрешена: ‘http://localhost:8080 /’. Не удалось подключиться к http://localhost:8080 /. Код ошибки TCP 10061: не удалось установить соединение, поскольку целевая машина активно отказалась от него 127.0.0.1:8080. Не удается подключиться к удаленному серверу, соединение не может быть установлено, поскольку целевая машина активно отказалась от него 127.0.0.1:8080 Если служба определена в текущем решении, попробуйте создать решение и снова добавить ссылку на службу.

Не уверен, что я могу с этим поделать. Есть идеи???

Спасибо, Джейсон.

Вот код из app.config внутри моего сервиса:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <system.diagnostics>
      <sources>
         <!-- This section defines the logging configuration for My.Application.Log -->
         <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
                <add name="FileLog"/>
                <!-- Uncomment the below section to write to the Application Event Log -->
                <!--<add name="EventLog"/>-->
            </listeners>
         </source>
       </sources>
       <switches>
          <add name="DefaultSwitch" value="Information" />
       </switches>
       <sharedListeners>
          <add name="FileLog"
               type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" 
               initializeData="FileLogWriter"/>
       </sharedListeners>
   </system.diagnostics>

   <system.serviceModel>
      <services>
         <service name="ExStreamWCF.Service1" 
                  behaviorConfiguration="ExStreamWCF.Service1Behavior">
            <!-- Service Endpoints -->
            <host>
               <baseAddresses>
                   <add baseAddress = "http://localhost:8080/Design_Time_Addresses/JasonsService/Service/" />
               </baseAddresses>
            </host>
            <endpoint address="" binding="wsHttpBinding" contract="ExStreamWCF.IService1">
               <identity>
                  <dns value="localhost"/>
               </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
         </service>
      </services>
      <behaviors>
         <serviceBehaviors>
            <behavior name="ExStreamWCF.Service1Behavior">
               <serviceMetadata httpGetEnabled="true"/>
               <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
         </serviceBehaviors>
      </behaviors>
   </system.serviceModel>
</configuration>
  

Если кому-то от меня нужно больше, пожалуйста, дайте мне знать!

Ответ №1:

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

Итак, можете ли вы попытаться изменить:

 <service name="ExStreamWCF.Service1" 
         behaviorConfiguration="ExStreamWCF.Service1Behavior">
   <host>
      <baseAddresses>
         <add baseAddress = "http://localhost:8080/Design_Time_Addresses/JasonsService/Service/" />
      </baseAddresses>
   </host>
  

Для

 <service name="ExStreamWCF.Service1" 
         behaviorConfiguration="ExStreamWCF.Service1Behavior">
   <host>
      <baseAddresses>
         <add baseAddress = "http://YourServerName:8080/Design_Time_Addresses/JasonsService/Service/" />
      </baseAddresses>
   </host>
  

Имеет ли это какое-либо значение при вызове службы??

Комментарии:

1. Никакой разницы вообще. Даже пробовал оба способа в адресе «Добавить ссылку на службу» клиентского приложения. Я заменил все значения ‘localhost’ в файлах конфигурации (Service amp; WCF). Но не повезло…

2. @Jason: есть какие-нибудь успехи, если вы попытаетесь подключиться к адресу MEX?? http://YourServer:8080/Design_Time_Addresses/JasonsService/Service/mex

3. @Jason: есть ли на этом сервере брандмауэр, который может отказать в подключении к порту 8080?? Если да: можете ли вы добавить правило к брандмауэру, чтобы разрешить это соединение?? Или не могли бы вы изменить URL на что-то вроде http://YourServer:80/:...... поскольку порт 80 (HTTP) обычно открыт на большинстве брандмауэров…

4. Моя ошибка… При добавлении ссылки на службу вызывался не тот каталог — но большое спасибо за вашу помощь!!!