2017-08-16 119 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> 

正如你可以看到在这个例子中,每个应用程序路径是唯一的。