 |
|
 |
I literally wasted 2 days trying to get SQLCacheDependency to work on an ASP.NET application. Even though this article doesn't speak to that directly, it helped me more than any article anywhere. Most complete and succinct example I have seen on the subject so far. Keep up the good work.
|
|
|
|
 |
|
|
 |
|
 |
I was able to run my app with the setup you suggested - THANKS!!
One problem I am having is that I need to use Stored Procedures for all my DB access calls. I added "GRANT EXECUTE to [sql_dependency_subscriber]" to your script attempting to give the subscriber access to run sprocs but I always get back an e.Info of "Invalid". My sproc was very simple:
CREATE PROCEDURE SelectAllUsers
AS
BEGIN
SET NOCOUNT ON;
SELECT ID, Name from dbo.Users
END
GO
Any chance you have some idea on why that would be?
Also, is there a way to know why the result was Invalid? I can not seem to find any trace of exactly what went wrong.
Rick
|
|
|
|
 |
|
 |
I found my own answer: You can not use this statement in the sproc.
SET NOCOUNT ON
I removed it and everything is fine now.
|
|
|
|
 |
|
 |
Hi Micheal,
the article has helped a lot. thanks..
Please advise for my requirement. i got a requirement of sqldependency on a table in win forms application. can i use this sqldependency. Does sqlDependency.Start() maintains a live database connection ??
Thanks
Naveen S
|
|
|
|
 |
|
 |
Yes this feature should also work in WinForms and yes it does keep a live database connection while it's waiting for events.
|
|
|
|
 |
|
 |
Hi,
When I try to follow your example in the article, I get an error while starting SqlDependency ( SqlDependency.Start(mStarterConnectionString)).
The error is :
A connection was successfully established with the server, but then an error occurred during the login process. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)
Thanks,
Samnang
|
|
|
|
 |
|
 |
I want to enable sql server notification on existing database user which has execute permission on some stored procedures? i did accordingly but now i get following error
A connection was successfully established with the server, but then an error occurred during the login process. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)
consider user is 'username' and database is 'databasename'
------------------------------------------------------
use [master]
Go
-- Ensuring that Service Broker is enabled
ALTER DATABASE [DatabaseName] SET ENABLE_BROKER
GO
-- Switching to our database
use [DatabaseName]
GO
CREATE SCHEMA username AUTHORIZATION username
GO
ALTER USER username WITH DEFAULT_SCHEMA = username
GO
/*
* Creating two new roles. We're not going to set the necessary permissions
* on the user-accounts, but we're going to set them on these two new roles.
* At the end of this script, we're simply going to make our two users
* members of these roles.
*/
EXEC sp_addrole 'sql_dependency_subscriber'
EXEC sp_addrole 'sql_dependency_starter'
-- Permissions needed for [sql_dependency_starter]
GRANT CREATE PROCEDURE to [sql_dependency_starter]
GRANT CREATE QUEUE to [sql_dependency_starter]
GRANT CREATE SERVICE to [sql_dependency_starter]
GRANT REFERENCES on
CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]
to [sql_dependency_starter]
GRANT VIEW DEFINITION TO [sql_dependency_starter]
-- Permissions needed for [sql_dependency_subscriber]
GRANT SELECT to [sql_dependency_subscriber]
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [sql_dependency_subscriber]
GRANT RECEIVE ON QueryNotificationErrorsQueue TO [sql_dependency_subscriber]
GRANT REFERENCES on
CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]
to [sql_dependency_subscriber]
-- Making sure that my users are member of the correct role.
EXEC sp_addrolemember 'sql_dependency_starter', 'username'
EXEC sp_addrolemember 'sql_dependency_subscriber', 'username'
|
|
|
|
 |
|
|
 |
|
 |
The query notification dialog on conversation handle '{A79C2690-65FF-DC11-A4E1-000D5670268E}.' closed due to the following error: '<?xml version="1.0"?><Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker/Error"><Code>-8494</Code><Description>You do not have permission to access the service 'SqlQueryNotificationService-2424d027-3faa-4b1a-95a5-95f0a3636b62'.</Description></Error>'.
|
|
|
|
 |
|
 |
what if I create only one role called application_sql_dependency role and assign all the permission required for sender and subscriber. Will this work? reason behing this I want run my ASP.NET web application under only one windows account which is added to the application_sql_dependency databse role. I guess giving required permissions to this role will do the job. Please let me know.
|
|
|
|
 |
|
 |
No, don't think it will. My comments state:
* It is vital that we create a schema specifically for startUser and that we
* make this user the owner of this schema. We also need to make sure that
* the default schema of this user is set to this new schema (we have done
* this earlier)
if you simply create a role for both users and not the schema for the start-user, then it won't work.
|
|
|
|
 |
|
 |
First of all, thanks for your article. It helps a lot. All examples except this works only for an admin account like sa, but I needed a solution for accounts with restricted rights.
And second, it looks like noone from MS tested it with restricted logins. If you call SqlDependency.Start( connString ) with the startUser you mentioned, but don't call SqlDependency.Stop( connString ), the following happens: SQL Server 2005 recognizes the loss of the connection, and starts a timer trying to clean up. Unfortunately, the stored procedure which was created during SqlDependency.Start() doesn't include the schema for the service. So the service can't be cleaned, the stored procedure fails, and an entry in the SQL Server log is written. The message of this entry is of no use, telling there's no text for the stored procedure in syscomments
And then the timer comes back, tries the same thing again. And again. Several times a seconds. In effect, you will find a lot of entries in the SQL Server log. Far more than the protocol viewer of SQL Server Managment Studio can handle. It shows an OutOfMemoryException.
To make things even more worse, imagine there wasn't a single SqlDependency.Stop() missing, but more. Imagine 5. Or 10. In this case, depending on your server, you ask yourself why is the server so slow. Unusable slow. In my case, it's a very small server, just for development. Dual core Blade with 1 GB RAM and 60 GB hard disc space, running Windows 2003, SQL Server 2005 SP1, later SP2, and an Oracle 10g (not used but running). Four missing Stop's leads to a new server because noone knows why the server was getting so slow.
This happened to me. It doesn't matter why the SqlDependency.Stop() is missing. It can be the developer not reading the manuals carefully Or it can be a crashing application.
It's not a problem of the solution mentioned in your article. It's a bug not found during development of SQL Server, beta and CTP. For me working with the sa account is no workaround. I must tell our DB administrator tomorrow so he knows where to look if our application goes live in two weeks.
Thanks again,
Martin
|
|
|
|
 |
|
 |
Thanks for your feedback. I was not aware that this could happen when you didn't perform a Stop.
What I had already noticed was that not cleaning up properly (which sometimes happen during development when you cancel a console app for example something by pressing Ctrl-C) will leave Service Broker Queues and Services in the database that don't ever get cleaned up. You'll find them under Service Broker|Queues and Service Broker|Services in the Management Studio.
Regards,
Michael
|
|
|
|
 |
|
 |
Finally, I tested it under SQL Server 2008 R2 SP1 again. And it works now, the bug is fixed.
Regards,
Martin
|
|
|
|
 |
|
 |
I struggled with this for whole day trying find out what was wrong. You answered all my questions and solved my problem. This a great feature of SQL server 2005 and really gives a nice polish to an application.
Thanks!
Mike
|
|
|
|
 |
|
 |
Hi,
Is GRANT VIEW DEFINITION TO [sql_dependency_starter] really necessary? I have set up SqlCacheDependency, and it's working, but I have not set this grant. I'm just wandering if I will have any problems in the future because of this.
Regards,
Mikael Jirhage
Sweden
|
|
|
|
 |
|
 |
I honestly don't really know. I added this right because it was explicitely mentioned on Sushil Cordia's blog, but I have never tried it without it.
Regards,
Michael
|
|
|
|
 |
|
 |
Man, your article is Great!!! I had the same problem when creating subscriptions (I didn´t put the ownership of the schema as you mentioned, that´s why I was getting trouble).
Tks!!! and good job!
|
|
|
|
 |
|
 |
Thanks for the info. Woulda never got this &(*#U to work without your example. Thanks.
|
|
|
|
 |
|
 |
Michael,
This is a great example. It's the complete solution, not just random sections of code that you have to piece together to understand. And, it actually works! This is great. I've spend about two days searching for how to get to work until I came across your article. Amazing. Thanks for taking the time to provide this for us.
-B
|
|
|
|
 |
|
 |
thanks
keep the good work
AMH
Software Developer
LIFE'S SHORT. If you don't look around once in a while you might miss it
|
|
|
|
 |