HTTP не может зарегистрировать URL http - PullRequest
0 голосов
/ 09 февраля 2019

Я создал тестовый сервис с шаблоном WCF Visual Studio 2017. Он создает проект библиотеки с этим файлом конфигурации приложения:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- Al implementar el proyecto de la biblioteca de servicios, el contenido del archivo de configuración se debe agregar al archivo 
  app.config del host. La configuración del sistema no admite archivos de configuración en las bibliotecas. -->
  <system.serviceModel>
    <services>
      <service name="Dummy.Service1">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8733/Design_Time_Addresses/Dummy/Service1/" />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- A menos que esté completa, la dirección está en relación con la dirección base suministrada anteriormente -->
        <endpoint address="" binding="basicHttpBinding" contract="Dummy.IService1">
          <!-- 
              Antes de la implementación, se debe quitar o reemplazar el siguiente elemento de identidad para reflejar la 
              identidad bajo la que funciona el servicio implementado. Si se quita, WCF deducirá automáticamente una identidad 
               apropiada.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- El servicio utiliza el extremo de intercambio de metadatos para describirse a sí mismo ante los clientes. --> 
        <!-- Este extremo no utiliza un enlace seguro, por lo que se debe proteger o quitar antes de la implementación -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- Para evitar revelar información de los metadatos, 
          establezca los valores siguientes en false antes de la implementación -->
          <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
          <!-- Para recibir detalles de las excepciones en los fallos, con el fin de poder realizar la depuración, 
          establezca el valor siguiente en true. Para no revelar información sobre las excepciones 
          establézcalo en false antes de la implementación -->
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

Затем я использую тот же файл конфигурации приложения в своем сервисе,изменение необходимой информации.Файл конфигурации приложения выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>




  <!--WCF-->
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- Al implementar el proyecto de la biblioteca de servicios, el contenido del archivo de configuración se debe agregar al archivo 
  app.config del host. La configuración del sistema no admite archivos de configuración en las bibliotecas. -->
  <system.serviceModel>
    <services>
      <service name="GestorAplicaciones.Wcf.Servicio.Net.GestorAplicacionesService">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8733/GestorAplicaciones" />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- A menos que esté completa, la dirección está en relación con la dirección base suministrada anteriormente -->
        <endpoint address="" binding="basicHttpBinding" contract="GestorAplicaciones.Wcf.Comun.Net.IGestorAplicacionesService">
          <!-- 
              Antes de la implementación, se debe quitar o reemplazar el siguiente elemento de identidad para reflejar la 
              identidad bajo la que funciona el servicio implementado. Si se quita, WCF deducirá automáticamente una identidad 
               apropiada.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- El servicio utiliza el extremo de intercambio de metadatos para describirse a sí mismo ante los clientes. -->
        <!-- Este extremo no utiliza un enlace seguro, por lo que se debe proteger o quitar antes de la implementación -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- Para evitar revelar información de los metadatos, 
          establezca los valores siguientes en false antes de la implementación -->
          <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
          <!-- Para recibir detalles de las excepciones en los fallos, con el fin de poder realizar la depuración, 
          establezca el valor siguiente en true. Para no revelar información sobre las excepciones 
          establézcalo en false antes de la implementación -->
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <!--FIN WCF-->
</configuration>

Наконец, у меня есть приложение WPF для размещения службы.Код в следующем коде:

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();


            using (_host = new ServiceHost(typeof(GestorAplicacionesService)))
            {
                _host.Open();
            }
        }



        private ServiceHost _host;
    }

Когда я запускаю приложение WPF, я получаю сообщение об ошибке, что я не могу зарегистрировать URL.

Я нашел несколько решенийв этой теме HTTP не может зарегистрировать URL http://+:8000/HelloWCF/. Ваш процесс не имеет прав доступа к этому пространству имен

В общем, одно из решений - это запустить Visual Studio с правами администратора, иДругое решение - установить URL с помощью netsh, но я бы хотел, чтобы мне действительно это нужно, потому что если проекту Dummy, созданному с шаблоном WCF, это делать не нужно, потому что создается служба.

Возможно, как и проект Dummy, он является частью библиотеки. Когда я работаю в Visual Studio, Visual Studio создает пользовательскую среду, и затем ее можно запустить, но я хотел бы знать, действительно ли в моем проекте я могу решить эту проблемупроблема без использования netsh или запуска с правами администратора.

Спасибо.

1 Ответ

0 голосов
/ 09 февраля 2019

При отладке приложения в Visual Studio щелкните правой кнопкой мыши Visual Studio> Запуск от имени администратора> Откройте проект и запустите службу.Это проблема, связанная с привилегиями.

А также при использовании целевой машины netsh add urlacl cmd:

netsh add urlacl url=http://+:8000/HelloWCF/ user=DOMAIN\user

Я надеюсь быть полезной!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...