2016-09-20 65 views
0

我面對我的地方(發展)服務織物實例以下錯誤消息:服務織物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

你確定要添加到HttpListener URL前綴的網址是使用ServiceManifest.xml定義的端口?

「拒絕訪問」要麼是指:

  1. 有人已經使用該端口
  2. 您沒有使用在ServiceManifest.xml

你已經可以設置端口使用應用程序端口範圍內的任何端口。該範圍是Service Fabric通過OS防火牆打開的高端口號範圍內的一組端口。這些端口來自應用端口同一池的TCP/IP協議棧給你,當你打開一個socket端口0。或者,如果設置了一個端點配置在ServiceManifest.xml和指定端口號在那裏,你會從這個範圍內得到一個隨機端口。

你ServiceManifest.xml定義的端口主要用於HTTP.SYS URL ACLing。如果它是應用程序端口範圍之外的端口,它還將通過OS防火牆打開一個端口。

通過負載平衡器「打開」到Internet的端口是一個不同的故事,並且與服務結構並不真正相關。這更多的是硬件/拓撲配置(Service Fabric是所有軟件)。在Azure中,您可以通過集羣的資源管理器JSON或甚至在創建集羣時通過Azure門戶進行配置。

應用端口範圍在集羣的每個節點定義(或每VMSS在天青)。

相關問題