我正在尝试 Azure 上的新网站功能,并尝试让 MVC 站点在嵌入模式下与 RavenDB 一起运行。本地一切正常,但在 azure 中运行部署的站点时出现此错误:
System.Net.NetworkInformation.NetworkInformationException:访问被拒绝
当我在 global.asax 中创建数据库实例时会发生这种情况:
Store = EmbeddableDocumentStore { ConnectionStringName = "RavenDb" };
我的连接字符串是:
<add name="RavenDb" connectionString="DataDir=~\App_Data\Raven" />
谢谢!
最佳答案
当没有为 RavenDb 指定端口时,它会出去并尝试找到自己的端口,它通过调用 IPGlobalProperties.GetActiveTcpListeners() 来实现此目的。
var activeTcpListeners = IPGlobalProperties
.GetIPGlobalProperties()
.GetActiveTcpListeners();
调用GetActiveTcpListeners() intern 调用 Win32 函数 GetTcpTable(),该函数尝试枚举主机上所有可能的端口组合。出于显而易见的原因,允许人们在 Windows Azure 网站内进行端口扫描并不是一个好的方案。这意味着 GetTcpTable 操作失败,当开发领域出现故障时,我们会抛出异常。
在这种特殊情况下,异常(exception)是 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>
关于asp.net-mvc-3 - Azure 网站上的 RavenDb - 访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11529159/