6

Azureの新しいWebサイト機能を試して、組み込みモードのRavenDBでMVCサイトを実行しようとしています。すべてがローカルで正常に動作しますが、デプロイされたサイトを紺碧で実行すると、次のエラーが発生します。

System.Net.NetworkInformation.NetworkInformationException:アクセスが拒否されました

これは、global.asaxでdbインスタンスを作成するときに発生します。

Store = EmbeddableDocumentStore { ConnectionStringName = "RavenDb" };

私の接続文字列は次のとおりです。

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

ありがとう!

4

1 に答える 1

12

RavenDbにポートが指定されていない場合、ポートは出力されて独自のポートを見つけようとします。これは、IPGlobalProperties.GetActiveTcpListeners()を呼び出すことによって行われます。

RavenDb | PortUtil.cs

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

GetActiveTcpListeners ()インターンを呼び出すと、Win32関数GetTcpTable()が呼び出され、ホストで可能なすべてのポートの組み合わせを列挙しようとします。明らかな理由から、WindowsAzureWebサイト内でポートスキャンを実行できるようにするのは適切なシナリオではありません。つまり、GetTcpTable操作が失敗し、開発の世界で何かが失敗すると、例外がスローされます。

この特定のケースでは、例外はNetworkInformationExceptionであり、 GetTcpTableへの呼び出しを無視してセキュリティ権限に対して発生します。これが、アクセス拒否メッセージが表示される理由です。

tl; dr

web.configappsettingsセクションにデフォルトのポートを追加します。

 <appSettings> 
    <add key="Raven/Port" value="*"/> <!-- Add real tcp port # -->
    <add key="Raven/DataDir" value="~\Data"/> 
    <add key="Raven/AnonymousAccess" value="Get" /> 
 </appSettings> 
于 2012-07-17T22:17:32.633 に答える