Otis wrote:
I'll go for feature .
You win...
Here is the response and workaround for anyone who is interested:
PSS wrote:
I reproduced this issue in Windows XP and have done a lot of debugging. I am providing you with some findings:
This issue happens in IIS5.0/5.1 due to the mechanism how IIS parses the URL request. When IIS handles the request, it tries to find an extension mapping. Because there is a wildcard extension mapping of this site, it will find the wildcard mapping when the request contains dot. IIS will try to build a physical path of the page from the URL. If the path exists and it is a directory, the IIS will treat it as malformed request and return HTTP 404 error.
The mechanism how the IIS builds the physical path is complicated. The result may be beyond your expectation. I understand that you may think it is a bug. In fact we met such kind of issue before when some Asian languages’ virtual directory name may be encoded as the string containing “.”. Unfortunately modifying this behavior is a big change in IIS and our product team will not modify this feature.
Based on my research, I am providing you with a workaround to make IIS not find the physical path and then IIS will go further to parse the URL:
- Make sure the physical folder Sds.ModernArk.Web.UI.Test exists under c:\inetpub\wwwroot. The whole path should be c:\inetpub\wwwroot\Sds.ModernArk.Web.UI.Test.
- You have created a virtual directory under root folder named Sds.ModernArk.Web.UI.Test which points to c:\inetpub\wwwroot\Sds.ModernArk.Web.UI.Test.
- Then open a command prompt and go to c:\inetpub\adminscripts. Run the following command:
Cscript adsutil.vbs delete w3svc/1/root/Sds.ModernArk.Web.UI.Test/Path
- Since we delete the path property, when IIS builds the physical path, it will combine the parent folder with the current virtual directory name. Because the current virtual directory name contains “.”, it will incorrectly build the physical path. Finally it will not find the physical path. Then IIS will go further to parse the rest of URL.
The above workaround may not be pretty but it works on my testing machine. I think it could be applied on your developers’ machines. For the production machine, I recommend you using Windows 2003 because IIS 6.0 has different mechanism to work with the URLs.
While the above workaround works... it relies on the fact that you have the web folder under the default IIS root "c:\inetpub\wwwroot\" which of course no serious project would have...
The solution is then to create UNIX style symbolic links between dummy folders in c:\inetpub\wwwroot\ and the actual folders containing the source code on your local hard drive. In Windows, symbolic links are called "NTFS junctions" and may be created using the linkd.exe utility found in tn Win2k Resource Kit or by downloading another tool from SysInternals called Junction (http://www.sysinternals.com/Utilities/Junction.html).
I have written a HUGE script which has automated all of the above so that when I pull source from source control onto a new machine, I double click the script file and it creates all the virtual directories, including wildcard mapping configuration, dummy folders, permissions and junction points... NIGHTMARE.
On the question of payment... Microsoft compromised on this:
PSS wrote:
It is glad to hear the workaround works. The bug is defined by our product team. I admit that the virtual path containing dot may not work as expected. I think it is not effective for us to argue whether it is a bug or not since the bug is defined by the product team.
I understand your concerns. I will set this case as non-decrement one for your satisfaction so that you will be refunded automatically. Then I will archive this case.
Marcus