WCF call has 15 seconds delay after idle for couple of minutes

  Customer has a WCF application which uses ASP.Net as a client. The service is hosted on another IIS as well. For secure purpose, customer enabled transport layer security for the WCF service.   Customer found the ASP.Net web page took more than 15+ seconds sometimes while normally it takes less than 1 second. With…


ASP.Net application hangs due to string.IndexOf

I had an interesting case recently. We discovered a hang in ASP.Net application caused by string.IndexOf method. Problem description:  Frequently, this ASP.Net application would hang and the IIS worker process needs to be restarted for the application to function correctly. This happens even when the load is low. Troubleshooting: Same as before, we captured hang…


High Performance ASP.NET application (2) – Caching ASP.NET application Introduction

Last time we take a bite of a piece of writing high performance ASP.NET application – State Management. Today, we’ll continue our topic to explore the ASP.NET caching mechanism. How to effectively and efficiently leverage cache when writing your ASP.NET application is essential to the application performance in terms of response time and resource management….


IE 7 starts a new connection for every request when access one specific site

After upgrading from IIS 5 to IIS 6, client observed the web application performance was not as good as before. This site uses Windows Integrated Authentication, by compare the IIS log, customer found huge number of 401s were recorded in IIS 6 log. And each 401 takes about 300+ms since customer’s network has high latency….


Missing INTERNET_STATUS_REQUEST_COMPLETE callback after calling Wininet’s FtpOpenFile() in asynchronous mode

Symptom:   To reproduce the issue: 1.       Put a zero byte file on a FTP site. 2.       Call InternetOpen() with flag INTERNET_FLAG_ASYNC 3.       FtpOpenFile() to download the file. Wininet will send out a FTP request. After receiving the response, the registered callback procedure will receive an INTERNET_STATUS_REQUEST_COMPLETE event. 4.       Call FtpOpenFile() again. This time Wininet…


How to determine Cipher Suite between IE and IIS

  Assume you already looked at Xin’s article about How to use 256 bit SSL in IIS 6.0.   It is quite common to ask whether old version IE client will be affected after applying kb948963 which adds support for AES cipher suites in the Schannel.dll module for Windows Server 2003.   The answer is…


High Performance ASP.NET application (1) – Optimizing state management

Today we’ll talk a little about how to optimize state management when coding your ASP.NET application. I believe most of ASP.NET developers more or less have some knowledge of using state in ASP.NET. In this article, we’ll not be focusing on how to use state in ASP.NET but how to more efficiently and effectively manage…


Some perl clients get error message after upgrading FTP server from IIS 6 to 7

Symptom:   FTP client get below error   425-Cannot open data connection.  Win32 error:   The network connection was aborted by the local system.  Error details: Client IP on the control channel didn’t match the client IP on the data channel.   Troubleshooting:   1.       We followed the steps in http://support.microsoft.com/kb/941940 to test opening FTP passive…


Heap corruption in HttpCacheModule while you try to remove HTTP headers in your custom HTTP module.

Some users want to remove certain HTTP headers in IIS 7.0/7.5 to avoid divulging platform information through response headers.  They usually implement a custom HTTP module and remove the headers in  PreSendRequestHeaders notification.                   public void Init(HttpApplication app)        {            app.PreSendRequestHeaders += new EventHandler(this.PreSendRequestHeaders);        }        private void PreSendRequestHeaders(object sender, EventArgs e)        {            HttpContext.Current.Response.Headers.Remove(“Server”);            HttpContext.Current.Response.Headers.Remove(“X-AspNet-Version”);            HttpContext.Current.Response.Headers.Remove(“X-Powered-By”);       …