C# 无法读取web.config文件

C# 无法读取web.config文件,c#,asp.net-mvc,iis,web-config,C#,Asp.net Mvc,Iis,Web Config,当我们试图读取配置文件中的连接字符串时,出现了一个错误。以下是我读取配置文件的方式: ConfigurationManager.ConnectionStrings[connectionStringName]; 下面是错误。 虚拟路径“/site1”映射到另一个应用程序,这是不允许的 最后,这是我在IIS服务器中的站点结构。请注意,这三个子网站位于主网站下。 注意:此错误并不总是发生。有时所有的网站都可以正常工作,没有任何问题。此外,这三个子网站引用相同的代码库 以下是完整的跟踪日志:

当我们试图读取配置文件中的连接字符串时,出现了一个错误。以下是我读取配置文件的方式:

 ConfigurationManager.ConnectionStrings[connectionStringName];
下面是错误。 虚拟路径“/site1”映射到另一个应用程序,这是不允许的

最后,这是我在IIS服务器中的站点结构。请注意,这三个子网站位于主网站下。

注意:此错误并不总是发生。有时所有的网站都可以正常工作,没有任何问题。此外,这三个子网站引用相同的代码库

以下是完整的跟踪日志:

     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) 

这似乎是在系统尝试读取web服务设置时发生的。

当ASP.NET网站复制到新文件夹时,解决方案的“虚拟路径”属性通常设置为文件夹名称而不是根目录。将虚拟路径设置更改为“/”以解决此问题。
这可以通过右键单击项目来完成,打开属性对话框:解决方案->属性->虚拟路径->更改为“/”

当ASP.NET网站复制到新文件夹时,解决方案的“虚拟路径”属性通常设置为文件夹名,而不是根目录。将虚拟路径设置更改为“/”以解决此问题。
这可以通过右键单击项目,打开属性对话框来完成:解决方案->属性->虚拟路径->更改为“/”

尝试在其自己的应用程序池下运行每个站点,并为每个站点(包括主站点)使用单独的bin目录。IIS可能认为它是在为Main服务,但它在内存中的某个地方切换到了Site1。如有必要,请使用WCF在站点之间进行通信。

尝试在其自己的应用程序池下运行每个站点,并为每个站点(包括主站点)使用单独的bin目录。IIS可能认为它是在为Main服务,但它在内存中的某个地方切换到了Site1。如有必要,请使用WCF在站点之间进行通信。

如果“IIS用户”组无权编辑当前应用程序根文件夹中的文件(您正试图访问其配置),则可能会发生这种情况

根据问题中给出的代码行,这应该默认为当前应用程序的配置。 检查IIS是否在允许其访问文件系统的帐户下运行(类似于localsystem或networkservice应该这样做),然后在IIS中检查正在运行相关应用的应用程序池的帐户是否在具有相同权限的帐户下或在“applicationpoolidentity”下运行它使用IIS的权限

作为一项临时测试,您可以授予“everyone”对相关目录的完全控制权,然后删除该权限并添加其他权限,直到您满意它只处理您需要的内容为止。

如果“IIS用户”组无权编辑您试图访问其配置的当前应用程序根文件夹中的文件

根据问题中给出的代码行,这应该默认为当前应用程序的配置。 检查IIS是否在允许其访问文件系统的帐户下运行(类似于localsystem或networkservice应该这样做),然后在IIS中检查正在运行相关应用的应用程序池的帐户是否在具有相同权限的帐户下或在“applicationpoolidentity”下运行它使用IIS的权限


作为一项临时测试,您可以授予“everyone”对相关目录的完全控制权,然后删除该权限并添加其他权限,直到您满意它只处理您需要的内容。

您的
applicationhost.config
文件中出现错误

您必须检查每个
路径
属性对于
是唯一的

要执行此操作:

<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>  
打开
%userprofile%\My Documents\IISExpress\config\applicationhost.config
并在
部分检查相应
节点。您可以很容易地从其端口号中找到它,该端口号位于
/
bindingInformation
属性中

例如:

<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>  


正如您在本例中看到的,每个应用程序路径都是唯一的。您的
applicationhost.config
文件中有一个错误

您必须检查每个
路径
属性对于
是唯一的

要执行此操作:

<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>  
打开
%userprofile%\My Documents\IISExpress\config\applicationhost.config
并在
部分检查相应
节点。您可以很容易地从其端口号中找到它,该端口号位于
/
bindingInformation
属性中

例如:

<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>  


正如您在本例中所看到的,每个应用程序路径都是唯一的。

您试图从哪个站点读取配置?能否在您的web.config文件中向我们展示,并在IIS屏幕截图中展开其中一个web应用程序。您是否进行任何类型的配置转换?所有不同的虚拟机是否都使用相同的配置?您是否看到过这篇文章,其中谈到了复制网站的问题?它们是否设置为IIS中的虚拟目录?您试图从哪个网站读取配置?能否在您的web.config文件中向我们展示,并在IIS屏幕截图中展开其中一个web应用程序。是否执行任何操作什么样的配置转换?所有不同的虚拟机是否都使用相同的配置?您是否看到过这个关于复制网站的问题?它们是否在IIS中设置为虚拟目录?