我在玩弄新的网站功能,在Azure上,并试图获得在嵌入式模式RavenDB运行MVC的网站。 一切工作正常,但本地运行在Azure中部署的网站,我得到这个错误:
System.Net.NetworkInformation.NetworkInformationException:访问被拒绝
发生这种情况时,我在Global.asax中创建数据库实例:
Store = EmbeddableDocumentStore { ConnectionStringName = "RavenDb" };
我的连接字符串是:
<add name="RavenDb" connectionString="DataDir=~\App_Data\Raven" />
谢谢!
如果不是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>