As I thought, your code behind confirmed it that you indeed are exporting your grid.
The above exception occurs when one tries to export a GridView control to Word, Excel, PDF, CSV or any other formats. Here the .net compiler thinks that the control is not added to the form and is rendered, hence it throws this error even if your GridView control is inside a form with runat = “server”.
You have to tell the compiler that the control is rendered explicitly by overriding the VerifyRenderingInServerForm event.
public override void VerifyRenderingInServerForm(Control control)
{
//
}
This will confirms that an HtmlForm control is rendered for the specified ASP.NET server control at run time
Wednesday, 26 June 2013
Tuesday, 11 June 2013
Error – Adding the specified count to the semaphore would cause it to exceed its maximum count
Identifying the ProblemAt first I though this might be due to the syntax of the query I was running. However after starting up Query Profiler I was able to run the query directly in SSMS without any issues. The problem clearly was somewhere in the application and not with the SQL query.
After investigating this, it appears that this error is related to ASP.NET’s ADO.NET connection pool manager. When you put together a connection string in your web.config file, you probably won’t be thinking about connection pooling, but by default this will be enabled. The connection pool manager will attempt to find a free connection, but if none are available it will throw the error we saw.
What is a Semaphore in SQL Server?The first question I asked myself was what a semaphore is since I had not heard this term used before. Well, it seems that the definition of semaphore is just a locking mechanism used by SQL Server behind the scenes to prevent more than one task from accessing a data structure that is currently in use. In particular SQL Server protects user log caches using semaphores.
What is the cause of this problem?So that was pretty interesting information. Basically with the error being returned, it appears that some sort of a lock was being retained and not released when my VB.NET application was communicating with SQL Server. It was definitely not a problem with long running queries or forgetting to clean up the connection object after execution was complete.
I’m still not able to pin down exactly what was causing this error to happen. People online speculate that similar problems appear to be caused by network issues. However, when I encountered the problem there were no noticeable network problems though, so I doubt that the network was causing the problem in my case.
Bottom line is that the semaphore locking issue appears to be related to ASP.NET’s connection pooling. Resources were being locked in the pool and then were not being released, so I would see the semaphore error when my application was trying to access the application pool and no free resources were available.
Why Are Connection Pools Used By Default?So since ADO.NET connection pools seem to be a possible point of failure, the question remains: why are connection pools enabled by default? The answer is performance.
There is a high performance hit involved with establishing a connection with a database, so ADO.NET tries to increase performance by not destroying connections after a call has happened to a database. Rather, ADO.NET puts the released connection into a pool which it holds for the next time that a request to the database is made. In general this ends up returning database results much faster than if connection pooling is disabled.
Of course we have also seen the down-side to connection pooling, which is the semaphore error where ADO.NET tries to access a connection in the pool, and finds that it can’t.
In the case of my application I decided that the possible performance improvement gained by using connection pooling was outweighed by the possibility of getting ugly connection errors such as the semaphore error, so next I will explain how to ‘fix’ the semaphore error by disabling ADO.NET connection pooling.
Fixing the ProblemThe simplest way to fix the ADO.NET semaphore error is to disable connection pooling in the connection string of your web.config file.
Here is an example of what a default connection string might look like. Although it doesn’t specify a connection pooling option, this is enabled by default:
<add name="testConnection" connectionString="Data Source=MyDBServer;Initial Catalog=MyDatabase;Persist Security Info=True;User ID=testUserId;Password=TestPassword;"
providerName="System.Data.SqlClient" />
Now to disable pooling and get rid of the error message we were seeing, we simply append the directive Pooling=False to the end of our connection parameters as follows:
<add name="testConnection" connectionString="Data Source=MyDBServer;Initial Catalog=MyDatabase;Persist Security Info=True;User ID=testUserId;Password=TestPassword;Pooling=False;"
providerName="System.Data.SqlClient" />
Pretty simple, right?
Sometimes finding the reason for a problem is more difficult than fixing the problem. Now that I know what was causing the error I will find it easier to diagnose similar problems in future!
After investigating this, it appears that this error is related to ASP.NET’s ADO.NET connection pool manager. When you put together a connection string in your web.config file, you probably won’t be thinking about connection pooling, but by default this will be enabled. The connection pool manager will attempt to find a free connection, but if none are available it will throw the error we saw.
What is a Semaphore in SQL Server?The first question I asked myself was what a semaphore is since I had not heard this term used before. Well, it seems that the definition of semaphore is just a locking mechanism used by SQL Server behind the scenes to prevent more than one task from accessing a data structure that is currently in use. In particular SQL Server protects user log caches using semaphores.
What is the cause of this problem?So that was pretty interesting information. Basically with the error being returned, it appears that some sort of a lock was being retained and not released when my VB.NET application was communicating with SQL Server. It was definitely not a problem with long running queries or forgetting to clean up the connection object after execution was complete.
I’m still not able to pin down exactly what was causing this error to happen. People online speculate that similar problems appear to be caused by network issues. However, when I encountered the problem there were no noticeable network problems though, so I doubt that the network was causing the problem in my case.
Bottom line is that the semaphore locking issue appears to be related to ASP.NET’s connection pooling. Resources were being locked in the pool and then were not being released, so I would see the semaphore error when my application was trying to access the application pool and no free resources were available.
Why Are Connection Pools Used By Default?So since ADO.NET connection pools seem to be a possible point of failure, the question remains: why are connection pools enabled by default? The answer is performance.
There is a high performance hit involved with establishing a connection with a database, so ADO.NET tries to increase performance by not destroying connections after a call has happened to a database. Rather, ADO.NET puts the released connection into a pool which it holds for the next time that a request to the database is made. In general this ends up returning database results much faster than if connection pooling is disabled.
Of course we have also seen the down-side to connection pooling, which is the semaphore error where ADO.NET tries to access a connection in the pool, and finds that it can’t.
In the case of my application I decided that the possible performance improvement gained by using connection pooling was outweighed by the possibility of getting ugly connection errors such as the semaphore error, so next I will explain how to ‘fix’ the semaphore error by disabling ADO.NET connection pooling.
Fixing the ProblemThe simplest way to fix the ADO.NET semaphore error is to disable connection pooling in the connection string of your web.config file.
Here is an example of what a default connection string might look like. Although it doesn’t specify a connection pooling option, this is enabled by default:
<add name="testConnection" connectionString="Data Source=MyDBServer;Initial Catalog=MyDatabase;Persist Security Info=True;User ID=testUserId;Password=TestPassword;"
providerName="System.Data.SqlClient" />
Now to disable pooling and get rid of the error message we were seeing, we simply append the directive Pooling=False to the end of our connection parameters as follows:
<add name="testConnection" connectionString="Data Source=MyDBServer;Initial Catalog=MyDatabase;Persist Security Info=True;User ID=testUserId;Password=TestPassword;Pooling=False;"
providerName="System.Data.SqlClient" />
Pretty simple, right?
Sometimes finding the reason for a problem is more difficult than fixing the problem. Now that I know what was causing the error I will find it easier to diagnose similar problems in future!
Sunday, 2 June 2013
FIXING THE “HTTP ERROR 401.3 – UNAUTHORIZED” ISSUE IN IIS
I'm trying to test my ASP.Net website on localhost and I'm getting this error:
IIS 7 also creates "IUSR" as default user to access files via IIS. So make user IUSR has read access to files/folders.
How to check if IUSR has read Access? Right Click -> Folder -> Properties -> Security Tab See if IUSR is in Group or user names list, If No.
Click Edit -> Add -> Advanced -> Find Now -> Select IUSR and click OK four times
IIS 7 also creates "IUSR" as default user to access files via IIS. So make user IUSR has read access to files/folders.
How to check if IUSR has read Access? Right Click -> Folder -> Properties -> Security Tab See if IUSR is in Group or user names list, If No.
Click Edit -> Add -> Advanced -> Find Now -> Select IUSR and click OK four times
Thursday, 16 May 2013
Tuesday, 26 February 2013
User Profile Synchronization Service Stuck at "Starting" - Solution
While configuring User Profile Synchronization in SharePoint 2010, User Profile Synchronization service got stuck at "Starting" state. User profile synchronization service was in starting state for long time! I've been banging my head for couple of Hours.
.
After a while, tried running the FIM client from: C:\Program Files\Microsoft Office Servers\14.0\Synchronization Service\UIShell\miisclient.exe , FIM gave an Error Message: Unable to connect to the synchronization Service. found the root cause of the issue!
Solution was: The account I currently logged-in is a Local Administrator account, but not SharePoint Farm Admin! Logged off and logged in with Farm Admin account. Tried stopping the service which was in "Starting" state.
How to stop the User Profile Synchronization service which got stuck at "Starting" state?
In some cases, user profile synchronization service may started and then stopped. But here, user profile synchronization service hangs! Lets seek help from our friend: PowerShell! Get the User profile Synchronization service's GUID and pass it to Stop-SPServiceInstace cmdlet.
Get-SPServiceInstance > Services.txt
This will get all the services along with their GUID to a text file, say "services.txt". Open the file and get the GUID of User profile Synchronization service which will be in Provisioning state.
Once you get the GUID, execute: Stop-SPServiceInstance and provide the GUID
Restart the Server
worked this time!
In an another case, when we tried re-creating the user profile service application, had the same issue. Fix for this issue was to Remove ForefrontIdentityManager certificates from these 3 locations.
Personal
Trusted Root Certification Authorities
Trusted People
This is because, when I deleted an existing user profile service, it didn't delete the certificates and when recreating it caused the issue!
How to stop the User Profile Synchronization service which got stuck at "Starting" state?
In some cases, user profile synchronization service may started and then stopped. But here, user profile synchronization service hangs! Lets seek help from our friend: PowerShell! Get the User profile Synchronization service's GUID and pass it to Stop-SPServiceInstace cmdlet.
Get-SPServiceInstance > Services.txt
This will get all the services along with their GUID to a text file, say "services.txt". Open the file and get the GUID of User profile Synchronization service which will be in Provisioning state.
Once you get the GUID, execute: Stop-SPServiceInstance and provide the GUID
Restart the Server
worked this time!
In an another case, when we tried re-creating the user profile service application, had the same issue. Fix for this issue was to Remove ForefrontIdentityManager certificates from these 3 locations.
Personal
Trusted Root Certification Authorities
Trusted People
This is because, when I deleted an existing user profile service, it didn't delete the certificates and when recreating it caused the issue!
Wednesday, 30 January 2013
IIS set the Identity in Application pool
when the config the site into iis its also add the system login and password, otherwise its not connect the database server see the below image
Thursday, 24 January 2013
Wednesday, 16 January 2013
ASP.NET Ajax exception – Two components with the same id can’t be added to the application
There’s a couple of exceptions to look out for when you start developing custom ASP.NET Ajax client controls. They are:
These errors can be caused when you have a custom control/component which gets added and then re-added at some later point in time – such as when you have a partial page render. This is being caused because the Sys.Control or Sys.Component gets registered with the Sys.Application when you call the initialize method of your component like so:
Under the hood, the Sys.Application keeps a list of all the components that are registered with it – that’s how $find works. So when you call ‘initialize’, Sys.Application looks at the list of components that it currently knows about and if yours already exists then you will likely see one of the errors listed above.
The trick is to make sure that you call dispose on your control’s base when you are finished:
Microsoft JScript runtime error: Sys.InvalidOperationException: Two components with the same id ‘ctl00_MainContentPlaceHolder__eventsRepeater_ctl01_ke1′ can’t be added to the application.
and…
Microsoft JScript runtime error: Sys.InvalidOperationException: A control is already associated with the element.
These errors can be caused when you have a custom control/component which gets added and then re-added at some later point in time – such as when you have a partial page render. This is being caused because the Sys.Control or Sys.Component gets registered with the Sys.Application when you call the initialize method of your component like so:
MarkItUp.Web.MyCustomControl.callBaseMethod(this, ‘initialize’) ;
Under the hood, the Sys.Application keeps a list of all the components that are registered with it – that’s how $find works. So when you call ‘initialize’, Sys.Application looks at the list of components that it currently knows about and if yours already exists then you will likely see one of the errors listed above.
The trick is to make sure that you call dispose on your control’s base when you are finished:
dispose : function() {
$clearHandlers(this.get_element()) ;
// any other cleanup work
MarkItUp.Web.MyCustomControl.callBaseMethod(this, ‘dispose’) ;
}
Friday, 11 January 2013
ASP.NET Ignores IE7 Compatibility Mode Tag in Web.config
looks at the
<system.web>
section of Web.config instead of the <system.webServer>
section (which is used by IIS7, unless it's running in compatibility mode). To render this meta tag on every page of your site when running IIS6, I believe the best option is to add it to your MasterPage. I ended up adding the following code block to the OnPreRender event of my MasterPage:Page.Header.Controls.AddAt(0, new HtmlMeta { HttpEquiv = "X-UA-Compatible", Content = "IE=EmulateIE7" });
The reason I used AddAt instead of just plain Add is because the X-UA-Compatible meta tag apparently has to be the first thing in the page header in order for it to be respected.
Hope this helps someone in the same boat!
Subscribe to:
Posts (Atom)
KendoUI Chart using in AngularJS with Dynamic data
Here i'm going to do the KendoUI Chart using AngularJS and getting dynamic data from angular services. First need to down-lode the r...
-
When getting the following error ,using UI Bootstrap modal dialog in AngularJS project. Error like If you got error like above add t...
-
Identifying the Problem At first I though this might be due to the syntax of the query I was running. However after starting up Query Profil...
-
Hi friends, how get the data or auto save data to the server after a cell value changed in angular js I have to create a controller as ...