узел службы wcf запускается только на порту с номером 8080

#c# #web-services #wcf #port-number

#c# #веб-сервисы #wcf #номер порта

Вопрос:

У меня есть служба wcf, и я использовал консольное приложение в качестве хоста для своей службы. когда я использую базовый адрес следующим образом: <baseaddres ="http://ipaddress:8080/" /> . Когда я проверяю работу своей службы через веб-браузер, я могу открыть службу WSDL, и она работает нормально.

Но, поскольку я меняю номер порта на что-то другое. Узел службы запускается нормально (без исключения используемого номера порта или чего-либо еще). Когда я иду проверить, работает ли служба через веб-браузер, служба не отображается. в конце концов, мой клиент также не смог найти сервис.

конфигурация app.config

     <services>
  <service name="Natatorium_WCF.NatatoriumService"
           behaviorConfiguration="ServiceBehavior">
    <endpoint address="NatatoriumService"
              binding="wsHttpBinding"
              contract="Natatorium_WCF.INatatoriumService"
              bindingConfiguration="wsHttpBindingConfig">
    </endpoint>
    <endpoint address="NatatoriumService"
              binding="netTcpBinding"
              contract="Natatorium_WCF.INatatoriumService"
              bindingConfiguration="netTcpBindingConfig" >
    </endpoint>
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://[ServerName]:[PortNO.1]"/>
        <add baseAddress="net.tcp://[ServerName]:[PortNO.2]"/>
      </baseAddresses>
    </host>
  </service>
</services>
 

это код хоста для запуска службы (консольного приложения).

  static void Main(string[] args)
    {
        ChangeServerConfigFileAttributeValue("8080", "8090");
        using (ServiceHost host = new ServiceHost(typeof(Natatorium_WCF.NatatoriumService)))
        {
            host.Open();
            Console.WriteLine("Listening...");
            Console.ReadLine();
        }
    }
 

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

1. у вас есть какие-либо ограничения на брандмауэр или порты?

2. Я не знаю, как проверить брандмауэр, и, кстати, мой брандмауэр отключен @TMcKeown

3. Как, по вашему мнению, на это должна влиять конфигурация, поскольку она работает только с номером порта / 8080 @paramosh

4. Я добавляю свои настройки конфигурации в приведенном выше сообщении. Я использовал токены и автоматически устанавливал ip-адрес и номер порта во время выполнения. @paramosh

5. сама конфигурация выглядит хорошо. может быть что-то с кодом, запускающим хост.

Ответ №1:

 <configuration>
<system.serviceModel>
<services>

  <service name="HelloService.HelloService" behaviorConfiguration="mexBehaviour">
    <endpoint address="HelloService" binding="basicHttpBinding" contract="HelloService.IHelloService" ></endpoint>
    <endpoint address="HelloService" binding="netTcpBinding" contract="HelloService.IHelloService" ></endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" ></endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8080/"/>
        <add baseAddress="net.tcp://localhost:8090/"/>
      </baseAddresses>
    </host>

  </service>

</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="mexBehaviour">
      <remove name="serviceDebug"/>
      <serviceMetadata httpGetEnabled="true"/>
    </behavior>
  </serviceBehaviors>


</behaviors>
 

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

1. у меня та же ошибка, что и в коде, который я пишу в appconfig