2012-02-07 31 views
6

我正在使用默认的Sitemap提供程序with secutiry trimming。但是,一些如何,我得到:网站地图安全修剪引发SQL错误

A network-related or instance-specific error occurred while establishing a connection to SQL Server.

我在想,站点地图提供者正在寻找角色在错误的地方。我的配置是这样的:

<connectionStrings> 
    <add name="DB" ... /> 
</connectionStrings> 


    <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15"> 
     <providers> 
     <clear/> 
     <add name="SqlProvider" .../> 
     </providers> 
    </membership> 
    <roleManager enabled="true"> 
     <providers> 
     <add connectionStringName="DB" type="System.Web.Security.SqlRoleProvider" ... /> 
     </providers> 
    </roleManager> 

的站点地图标记定义是这样的:

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true" > 
     <providers> 
      <clear/> 
      <add name="XmlSiteMapProvider" 
      description="Default SiteMap provider." 
      type="System.Web.XmlSiteMapProvider " 
      siteMapFile="Web.sitemap" 
      securityTrimmingEnabled="true" /> 
     </providers> 
    </siteMap> 

为什么我收到SQL错误?修剪如何得到角色?

编辑: the ysod

+0

你好,可以请你拿出你得到确切的异常+任何堆栈跟踪。 – 2012-02-16 04:16:21

+0

而且您确定数据库连接实际上是正确的? – Vedran 2012-02-16 08:51:44

+0

是你的asp:sitemapdatasource,然后像 2012-02-16 08:56:20

回答

2

的核心错误从你的截图是

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server

不幸的是,这个被截断。该消息通常会继续“”被配置为允许远程连接。“”,并且这可能还有一个特定的原因(例如,它可能是状态(在各种其他原因中)“provider:SQL Network Interfaces ,错误:26 - 错误定位服务器/实例指定“)

但是,到目前为止的消息,它看起来像客户端计算机和SQL Server框之间的连接问题。所以我想看看对SQL Server框中和网络连接首先进行尽职调查:

  • SQL Server服务器的名称可以解析
  • 服务器可以用ping
  • 的SQL Server到达被配置为接受远程连接
  • 的SQL Browser服务在SQL Server框中
  • Windows防火墙不凑了过来
  • 的SQL Server本身实际上的F运行运行第一个地方

如果他们通过,那么你需要验证比你可以登录。我通常使用SQL管理工具,尤其是命令行工具sqlcmd来测试基本连接(例如:连接到默认数据库的sqlcmd -E -S mysqlserver\instance或连接到特定数据库的sqlcmd -E -S mysqlserver\instance -d database)。很明显,您需要以运行Web应用程序的用户身份运行它们,否则它们将尝试与您一样进行身份验证(使用runas或使用不同的凭据启动命令提示符[在开始菜单中查找命令提示符,然后,shift-right-click - >“以不同的用户身份运行]

然而,如果您可以获得完整的错误消息文本(而不是截断版本),那么最终会有所帮助,那么这可能有助于缩小范围你遇到的具体问题。

0

试试这个工作网站地图:

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true"> 
    <providers> 
    <add name="XmlSiteMapProvider" description="SiteMap provider which reads in .sitemap XML files." type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" siteMapFile="web.sitemap" securityTrimmingEnabled="true" /> 
    </providers> 
</siteMap> 
+0

仍然抛出同样的错误。 :( – robasta 2012-02-21 13:14:39

0

我会尝试制作一个全新的项目,只有默认的角色提供者和安全修整,看看你能否得到这个工作。

0

如果SqlRoleProvider在没有启用安全修剪的情况下工作,我的第一个猜测是,您的数据库或连接字符串会阻止多个同时连接。如果你能提供你的DB连接字符串的详细信息,这将是相当简单的...

0

通常,配置看起来是正确的。根据例外的消息,数据库不可用。你会检查数据库是否可以连接?

using (SqlConnection connection = new SqlConnection()) { 
    connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DB"].ConnectionString; 
    try { 
     connection.Open(); 
    } 
    catch() { 
     ... 
    } 
} 

“Steps to troubleshoot SQL connectivity issues”