当前位置 : 主页 > 网络编程 > ASP >

asp.net – SqlCacheDependency不起作用

来源:互联网 收集:自由互联 发布时间:2021-06-24
我想将SqlCacheDependency添加到我的应用程序. 因此,我决定创建小型tesp项目并面临困难. 我使用MSSQL 2008.我使用表格行创建新的数据库并添加了几行. 我执行了: ALTER DATABASE ForTest SET ENABLE_
我想将SqlCacheDependency添加到我的应用程序.
因此,我决定创建小型tesp项目并面临困难.
我使用MSSQL 2008.我使用表格行创建新的数据库并添加了几行.
我执行了:

ALTER DATABASE ForTest SET ENABLE_BROKER

在managmeng工作室.

Aspx页面:

public partial class WebForm1 : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
      {
       if (Cache["Lines"] == null)
       {
         string connectionString = 
           WebConfigurationManager.ConnectionStrings["ForTest"].ConnectionString;
         SqlConnection con = new SqlConnection(connectionString);
         string query = "SELECT dbo.Lines.Id, dbo.Lines.Value FROM dbo.Lines";
         SqlCommand cmd = new SqlCommand(query, con);
         SqlDataAdapter adapter = new SqlDataAdapter(cmd);

         DataSet ds = new DataSet();
         adapter.Fill(ds, "Lines"); 

         SqlCacheDependency empDependency = new SqlCacheDependency(cmd);
         Cache.Insert("Lines", ds, empDependency); 
       }
      }
    }

    protected void btnResult_OnClick(object sender, EventArgs e)
    {
      var result = Cache["Lines"];
    }
}

我运行此页面并向Cache添加行,然后在管理工作室中添加行,当我点击按钮时,我期待
缓存将被更改但缓存仍然是旧的.
我找不到我做错了什么:(你能给我一些提示,我怎么能解决这个问题?

谢谢

更新:
我伪造说在global.aspx我运行:

SqlDependency.Start(
    WebConfigurationManager.ConnectionStrings["ForTest"].ConnectionString
);
我有一个类似的问题.这篇文章: Troubleshooting SqlCacheDependency in SQL Server 2008 and SQL Server 2005对我帮助很大.

简而言之:数据库已从备份中恢复,并且创建数据库的原始Windows用户不再可用.所以我将数据库所有权更改为有效登录,类似于:

ALTER AUTHORIZATION ON DATABASE::[my_perfect_database_name] TO [sa];

它现在就像一个魅力.

我是如何找到问题的根源的?我运行查询SELECT * FROM sys.transmission_queue并找到transmission_status列中的下一个数据:

An exception occurred while enqueueing a message in the target queue.
Error: 15517, State: 1. Cannot execute as the database principal
because the principal “dbo” does not exist, this type of principal
cannot be impersonated, or you do not have permission.

这条消息给了我解决问题的关键.

网友评论