2012-07-17 127 views
6

我正在玩Azure上的新網站功能,並試圖在嵌入模式下獲得與RavenDB一起運行的MVC網站。一切工作正常,但本地運行在Azure中部署的網站,我得到這個錯誤:Azure網站上的RavenDb - 拒絕訪問

System.Net.NetworkInformation.NetworkInformationException:訪問被拒絕

這種情況發生時我在Global.asax中創建數據庫實例:

Store = EmbeddableDocumentStore { ConnectionStringName = "RavenDb" }; 

我的連接字符串是:

<add name="RavenDb" connectionString="DataDir=~\App_Data\Raven" /> 

謝謝!

+0

什麼是堆棧跟蹤? – 2012-07-17 22:17:37

回答

12

當沒有爲RavenDb指定端口時,它會熄滅並試圖找到它自己的,它通過調用IPGlobalProperties.GetActiveTcpListeners()來完成。

RavenDb | PortUtil.cs

var activeTcpListeners = IPGlobalProperties 
         .GetIPGlobalProperties() 
         .GetActiveTcpListeners(); 

調用GetActiveTcpListeners()實習生調用Win32函數GetTcpTable()它試圖枚舉所有可能的端口組合的主機上。出於顯而易見的原因,允許人們在Windows Azure網站中進行端口掃描並不是一個好方案。這意味着GetTcpTable操作失敗,並且當在開發環境中失敗時,我們會拋出一個異常。

在這種特殊情況下,例外情況是NetworkInformationException,該問題引發的安全權限忽略了對GetTcpTable的調用。這就是它導致拒絕訪問消息的原因。

TL;博士

添加默認的端口,以你的web.config appSettings部分:

<appSettings> 
    <add key="Raven/Port" value="*"/> <!-- Add real tcp port # --> 
    <add key="Raven/DataDir" value="~\Data"/> 
    <add key="Raven/AnonymousAccess" value="Get" /> 
</appSettings> 
+0

Azure是否允許您使用任何端口?手頭有一些我們應該知道的技巧嗎? – 2012-07-18 02:07:53

+2

我只是隨機挑選了一個端口,它的作品讓人讚賞! – 2012-07-18 17:33:30

+0

此處適用所有標準Windows端口,Windows Azure網站中沒有其他保留端口。 – 2012-08-01 22:51:39