2016-09-20 1 views
0

я столкнулся следующее сообщение об ошибке в моем случае ткань местного (развития) услуг:Service Fabric 0x80004005 Доступ запрещен открыть порт для HttpListener

2016-09-20 12:56:16.5008 WARN 7 Metrics.Visualization.MetricsHttpListener Unable to start HTTP Listener. Sleeping for 1 sec and retrying 2 more times System.Net.HttpListenerException (0x80004005): Access is denied 
    at System.Net.HttpListener.AddAllPrefixes() 
    at System.Net.HttpListener.Start() 
    at Metrics.Visualization.MetricsHttpListener.Start() in C:\Work\Metrics.NET\Src\Metrics\Visualization\MetricsHttpListener.cs:line 97 
    at Metrics.Visualization.MetricsHttpListener.<>c__DisplayClass15_0.<<StartHttpListenerAsync>b__0>d.MoveNext() in C:\Work\Metrics.NET\Src\Metrics\Visualization\MetricsHttpListener.cs:line 62 

Metrics.Net пытается открыть порт. Очевидно, что это не удается. Интересно, как я могу исправить эту проблему.

К моему ServiceManifest.xml я добавил следующую строку:

<Resources> 
    <Endpoints> 
     <!-- This endpoint is used by the communication listener to obtain the port on which to 
      listen. Please note that if your service is partitioned, this port is shared with 
      replicas of different partitions that are placed in your code. --> 
     <Endpoint Name="MyApplicationTypeEndpoint" Protocol="http" Port="20002" /> 
    </Endpoints> 
    </Resources> 

Порт является правильным.

Есть ли что-нибудь еще, о чем я должен позаботиться?
(Также на стороне записки - как я могу открыть диапазон портов, а не отдельных портов?)

ответ

1

Вы уверены, что URL вы добавляете к HttpListener Префикс URL использует порт, определенный в ServiceManifest.xml ?

«Доступ запрещен» означает либо:

  1. Кто-то уже использует этот порт
  2. Вы не используете порт, который вы установили в ServiceManifest.xml

Вы можете уже используйте любой порт из диапазона портов приложения. Этот диапазон представляет собой набор портов в диапазоне с высоким номером порта, который Service Fabric открывает через брандмауэр ОС. Эти порты поступают из одного пула портов приложений, которые стек TCP/IP дает вам, когда вы открываете сокет на порту 0. Или, если вы настроили конфигурацию конечной точки в ServiceManifest.xml и , не укажите номер порта там вы получите случайный порт из этого диапазона.

Порты, определенные вами в ServiceManifest.xml, предназначены главным образом для http.sys URL ACLing. Он также откроет порт через брандмауэр OS, если это порт за пределами диапазона портов приложения.

«Открытие» портов в Интернет через балансировщик нагрузки - это совсем другая история и не имеет отношения к Сервисной Ткань. Это скорее аппаратная/топологическая конфигурация (Service Fabric - все программное обеспечение). В Azure вы можете настроить это через диспетчер ресурсов JSON вашего кластера или даже через портал Azure при создании кластера.

Диапазон портов приложений определен для каждого узла вашего кластера (или для VMSS в Azure).

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

  • Нет связанных вопросов^_^