2017-08-16 157 views
1

我們在嘗試讀取配置文件中的連接字符串時出現錯誤。這是我如何閱讀配置文件:無法讀取web.config文件

ConfigurationManager.ConnectionStrings[connectionStringName]; 

以下是錯誤。 虛擬路徑'/ site1'映射到另一個應用程序,這是不允許的。

最後,這是我在IIS服務器上的網站結構。請注意,三個子網站託管在主網站下。 enter image description here

注意:該錯誤並不總是發生。有時候所有的網站都可以正常工作,沒有任何問題這三個子網站也是指相同的代碼庫。

下面是完整的跟蹤日誌:

 The following exception was thrown: The virtual path '/site1' maps to another application, which is not allowed.. Exception details: System.ArgumentException: The virtual path '/site1' maps to another application, which is not allowed. 
    at System.Web.CachedPathData.GetVirtualPathData(VirtualPath virtualPath, Boolean permitPathsOutsideApp) 
    at System.Web.HttpContext.GetFilePathData() 
    at System.Web.HttpContext.GetSection(String sectionName) 
    at System.Configuration.ConfigurationManager.GetSection(String sectionName) 
    at System.Configuration.ConfigurationManager.get_ConnectionStrings() 

我似乎已經在下面的場所,也是這個問題:

The following exception was thrown: The virtual path '/site1' maps to another application, which is not allowed.. Exception details: System.ArgumentException: The virtual path '/site1' maps to another application, which is not allowed. 
    at System.Web.CachedPathData.GetVirtualPathData(VirtualPath virtualPath, Boolean permitPathsOutsideApp) 
    at System.Web.HttpContext.GetFilePathData() 
    at System.Web.HttpContext.GetSection(String sectionName) 
    at System.ServiceModel.Activation.HostedAspNetEnvironment.UnsafeGetSectionFromWebConfigurationManager(String sectionPath, String virtualPath) 
    at System.ServiceModel.Configuration.ConfigurationHelpers.UnsafeGetSectionNoTrace(String sectionPath) 
    at System.ServiceModel.Diagnostics.TraceUtility.SetEtwProviderId() 
    at System.ServiceModel.ChannelFactory..ctor() 
    at System.ServiceModel.ChannelFactory`1..ctor(Type channelType) 
    at System.ServiceModel.ChannelFactory`1..ctor(Binding binding, EndpointAddress remoteAddress) 
    at System.ServiceModel.ClientBase`1..ctor(Binding binding, EndpointAddress remoteAddress) 

這似乎當系統嘗試讀取網頁出現服務設置。

+3

從哪個站點嘗試讀取配置? –

+0

對於所有三個網站I.m得到相同的錯誤 – user1659922

+3

你可以在web.config文件中顯示我們,並在IIS屏幕截圖中展開其中一個Web應用程序。 – Craig

回答

0

如果「IIS_IUsers」組沒有權限編輯您嘗試訪問配置的當前應用程序根文件夾中的文件,則可能會發生這種情況。

根據問題中給出的代碼行,這應該默認爲當前應用程序的配置。 檢查IIS是否在允許訪問文件系統的帳戶下運行(類似於localsystem或networkservice應該這樣做),然後在IIS中檢查所運行的應用程序所運行的應用程序池的帳戶是否在帳戶下運行具有相同的權限或使用IIS權限的「applicationpoolidentity」。

作爲臨時測試,您可以授予「所有人」對相關目錄的完全控制權,然後刪除該權限並添加其他權限,直到您滿意爲止,這樣才能滿足您的需求。

0

將ASP.NET網站複製到新文件夾時,通常將解決方案的「虛擬路徑」屬性設置爲文件夾名稱而不是根目錄。將虛擬路徑設置更改爲「/」以解決此問題。 這可以通過右鍵單擊項目,打開屬性對話框來完成:解決方案 - >屬性 - >虛擬路徑 - >更改爲「/」

0

嘗試在自己的應用程序池下運行每個站點並使用獨立的bin目錄包括主站點在內的每個站點。 IIS可能認爲它服務於Main,但在內存中某處它切換到Site1。如有必要,請使用WCF在站點之間進行通信。

0

您的applicationhost.config文件中出現錯誤。

您必須檢查每個<application>path屬性對於<site>是唯一的!

要做到這一點:

打開%userprofile%\My Documents\IISExpress\config\applicationhost.config並在部分<sites>檢查適當<site><virtualDirectory>節點。您可以從位於<bindings>/<binding>bindingInformation屬性中的端口號輕鬆找到它。

E.g. :

<site name="MyWebSite" id="1234"> 
    <application path="/" applicationPool="Clr4IntegratedAppPool"> 
     <virtualDirectory path="/" physicalPath="c:\inetpub" /> 
    </application> 
    <application path="/subsite1" applicationPool="Clr4IntegratedAppPool"> 
     <virtualDirectory path="/" physicalPath="C:\Solution\subsite1" /> 
    </application> 
    <application path="/subsite2" applicationPool="Clr4IntegratedAppPool"> 
     <virtualDirectory path="/" physicalPath="C:\Solution\subsite2" /> 
    </application> 
    <application path="/subsite3" applicationPool="Clr4IntegratedAppPool"> 
     <virtualDirectory path="/" physicalPath="C:\Solution\subsite3" /> 
    </application> 
    <bindings> 
     <binding protocol="http" bindingInformation="*:1234:localhost" /> 
    </bindings> 
</site> 

正如你可以看到在這個例子中,每個應用程序路徑是唯一的。