Abhi's den...

The piece of code which nobody cracked...
Viewstate error : 12031

Few days ago I was asked to look into an issue. In our application we have created dynamic grids to show data from database. This ASPX page was Ajax enabled. Moreover all the rows of the grid were in edit mode ie. the normal controls like textbox,dropdowns etc  were displayed in all the rows. This grid was Paginated. But for the past few days the paging was not working.

I executed the page and found that the page was generating an error 12031  with the following message

Sys.webForms.PageRequestManagerServerErrorException:An unknown error occurred while processing the request on the server .the status code returned from the server was:12031.

On my first round of analysis I found the issue with Viewstate. If the viewstate is large then connection is reset (ERROR_INTERNET_CONNECTION_RESET ). In local machine with less load this problem will not occur but as the load & network latency increases this error will come. Once this error is generated the general events of grid is not triggered. So advised my team to minimize the use of viewstate. It will help in to load the page faster & reduce the network traffic. I can increase the maxRequestlength value to allow more data but ideally i shouldn't increase that.

In the page tested by me a page with grid  with 372 rows generated a viewstate of 4.2 mb. you can disable viewstate using EnableViewState="false" for the individual controls and for the entire page also.

With every post back this much of data is transferred back & fro & this will result in low response time.

The developer was saving all the data into viewstate in page load and from that the data was populated to the grid.

Better solution is to retrieve only the required data from database, minimize the use of  viewstate, Viewstate can be compressed also. About all these I will update in another post.

Posted: Oct 13 2009, 12:41 PM by cabhilash | with no comments |
Filed under: ,
Add Web service reference- Components required to enumerate web references not installed

After playing with Web services for so many years this was a tricky error which kept me thinking for few minutes.

 Today when i tried to add WCF reference to my application it gave the following error,

Error

---------------------------
Microsoft Visual Studio
---------------------------
Failed to update Service Reference 'XXXBusiness.Reference'.
Error:The components required to enumerate Web references are not installed on this computer. Please re-install Visual Studio.(0x80004002)


What could have caused this error? Then i remembered there was a alert box from VS few hours ago which informed that some package was not loaded successfully and whether i wanted  VS to stop loading that package in future.Without reading the full message I accidentally pressed "YES" I know mea cupla.

 But i have to move forward ...

Now the solution

  1. Close all open Visual Studio instances
  2. Open the Command prompt available with Visual Studio and type devenv /resetskippkgs (You can directly type this to Run command or normal command prompt) 
  3. Add reference to the Web service/WCF service
Now I am back in business :)
WCF 8192 issue

This was a simple issue which baffled few brains in my project. For the past few weeks i was seeing the mails about this. What was the exact problem?

 Whenever a large xml stream is passed through WCF it generated the following error. Everything was fins at the ASP.net client side. Almost all the known properties of

 Problem: 
The maximum string content length quota (8192) has been exceeded while reading XML data. This quota may be increased by changing the MaxStringContentLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. 

Cause: 
By default WCF allows a string content of size 8192 (8K) to pass through without any problems. If the size increases above this set limit WCF treats the incoming message as bad message & hence throws an exception. This level was set considering the security aspect of distributed system. 

If we have to pass more data we will have to manually override this default setting. 

Now here the trick. Everyone looked at the client side but there is a server part also :)

When a WCF client is created  automatically all the properties required to run that service is added by default by visual studio.


Changes made in WCF server applications web.config : 
Added a new HTTPbinding 
    <bindings> 
      <wsHttpBinding> 
        <binding name="newHTTPBinding" maxBufferPoolSize="2147483647"maxReceivedMessageSize="2147483647"> 
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
            maxArrayLength="16384" maxBytesPerRead="4096"maxNameTableCharCount="16384" /> 
        </binding> 
      </wsHttpBinding> 
    </bindings> 

set the value for maxBufferPoolSize, maxReceivedMessageSize,maxStringContentLength 

for the HTTPEndpoint i created a new binding configuration and mapped it 

<endpoint bindingConfiguration="newHTTPBinding" address="" binding="wsHttpBinding"contract="Abhi.AbhiBiz.IContractBusiness"> 

After this binding the WCF endpoint will take the new properties and allow more characters through the endpoint 

Stringcontent was given a higher value at client- presentation layer but the same configuration was not given in WCF service-endpoint at the business layer. 

Security issue : 

2147483647 is the magical figure but most of the applications doesn't need this much data.If not tested properly this configuration can lead to DOS attacks.
We need a realistic figure which matches the datatransfer between the endpoints. BufferSize also should be monitored to check the memory consumption
 


WCF de-serializes the object passed between endpoints, so if an object of 500 KB is passed the de-serilized data will be much higher. Further complexity can arise if an array of object is passed. So a realistic value for maxBufferPoolSize, maxReceivedMessageSize,maxStringContentLength should be given.

Posted: Aug 06 2009, 10:08 PM by cabhilash | with 4 comment(s) |
Filed under:
SQL Server Management Studio query template
Last day I was working on SQL server and I got this strange error
---------------------------
Microsoft SQL Server Management Studio
---------------------------
Cannot find template file for the new query ('C:\Program Files\Microsoft SQL
Server\90\Tools\Binn\VSShell\Common7\IDE\SqlWorkbenchProjectItems\SQL\SQLFile.sql').
---------------------------
OK

At first I thought my SQl server installation was corrupt. I changed few settings, tried to repair but no use.

Solution:
Actually the solution was very simple. I just created an empty file SQLFile.sql in the designated folder and then it started working. Now this gave me a new idea. I could add my own template and every time I open SSMS I will get this template. Phew
Posted: Nov 23 2008, 09:36 PM by cabhilash | with no comments
Filed under:
.NET Framework V2.0 Obsolete API List

With the release of .Net framework 3.0 & 3.5 a lot API in .Net 2.0 has become obsolete.

I found two excellent links in MSDN which gives a comphrensive list of all the obsolete API's of .Net 2.0

  • The Obsoleted Types count is the number of obsoleted types found in the assembly/namespace.
  • The Obsoleted Members count is the number of obsoleted members not contained in an obsoleted type. If a type is obsolete, it's members are not counted in this value.

Obsolete List: By Assembly

Obsolete List: By Namespace

 

 

Posted: Jan 25 2008, 08:18 AM by cabhilash | with no comments |
Filed under:
More Posts