Hello,
We have a problem with asp.net's Server.MapPath() function. It's not a problem of any telerik product, but it prevents us from using the RadEditor since the Image Manager uses this function. Forgive me if this doesn't belong here, but after days of debugging and trial&error we are quite desperate - maybe there are some people among you who can point us in the right direction.
Filesystem structure is as follows:
d:\inetpub
d:\inetpub\wwwroot\website
d:\fileserver
d:\fileserver\1\images
d:\fileserver\2\images
We have a web (on IIS6) with multiple host headers configured, let's say "www.site1.com" and "www.site2.com". The web's home directory is d:\inetpub\wwwroot\website. The web runs an ISAPI filter .dll that does the following:
- It looks in the current url for "/images/";
- When "/images/" is found, it uses the current host header / server name to rewrite the url path to a corresponding fileserver directory.
So, for example:
- When www.site1.com/images/foo.jpg is requested, the ISAPI makes IIS look for "foo.jpg" in d:\fileserver\1\images;
- When www.site2.com/images/bar.jpg is requested, the ISAPI makes IIS look for "bar.jpg" in d:\fileserver\2\images.
This works fine, not a problem. Now, let's say you place a file "test.aspx" + codebehind file in the website's root and you put the following code in it:
Response.Write(Server.MapPath("/images/"))
Untill a couple of days ago, this returned the correct translated path. If you requested www.site1.com/test.aspx, it returned d:\fileserver\1\images. If you requested www.site2.com/test.aspx, it returned d:\fileserver\2\images. Now, the problem that's suddenly come up:
It seems that suddenly ASP.NET holds the translated path in its memory for all subsequent requests. If you now request www.site1.com/test.aspx, it returns d:\fileserver\1\images. And it keeps returning this, even if you request www.site2.com/test.aspx. So, ASP.NET caches the path that Server.MapPath returns. We know it's a caching issue, cause after an IIS restart or an application build, the cache is emptied and the correct path is returned. But then it is cached again and the problem starts all over again. We also know it's a .NET issue, cause when you create a test.asp file (that is processed by the classic ASP engine), it returns the correct path - every time!
So, my questions are obvious.
- Why did ASP.NET start caching this path suddenly?
- How to solve this?
- I have searched the web for answers, but I can't find anything about .NET's internal caching. Is there any way to influence it?
Sorry this is such a long story, I wanted to make the situation absolutely clear. I think this is a real expert question, I hope someone has an idea of where to look. My thanks in advance.
We have a problem with asp.net's Server.MapPath() function. It's not a problem of any telerik product, but it prevents us from using the RadEditor since the Image Manager uses this function. Forgive me if this doesn't belong here, but after days of debugging and trial&error we are quite desperate - maybe there are some people among you who can point us in the right direction.
Filesystem structure is as follows:
d:\inetpub
d:\inetpub\wwwroot\website
d:\fileserver
d:\fileserver\1\images
d:\fileserver\2\images
We have a web (on IIS6) with multiple host headers configured, let's say "www.site1.com" and "www.site2.com". The web's home directory is d:\inetpub\wwwroot\website. The web runs an ISAPI filter .dll that does the following:
- It looks in the current url for "/images/";
- When "/images/" is found, it uses the current host header / server name to rewrite the url path to a corresponding fileserver directory.
So, for example:
- When www.site1.com/images/foo.jpg is requested, the ISAPI makes IIS look for "foo.jpg" in d:\fileserver\1\images;
- When www.site2.com/images/bar.jpg is requested, the ISAPI makes IIS look for "bar.jpg" in d:\fileserver\2\images.
This works fine, not a problem. Now, let's say you place a file "test.aspx" + codebehind file in the website's root and you put the following code in it:
Response.Write(Server.MapPath("/images/"))
Untill a couple of days ago, this returned the correct translated path. If you requested www.site1.com/test.aspx, it returned d:\fileserver\1\images. If you requested www.site2.com/test.aspx, it returned d:\fileserver\2\images. Now, the problem that's suddenly come up:
It seems that suddenly ASP.NET holds the translated path in its memory for all subsequent requests. If you now request www.site1.com/test.aspx, it returns d:\fileserver\1\images. And it keeps returning this, even if you request www.site2.com/test.aspx. So, ASP.NET caches the path that Server.MapPath returns. We know it's a caching issue, cause after an IIS restart or an application build, the cache is emptied and the correct path is returned. But then it is cached again and the problem starts all over again. We also know it's a .NET issue, cause when you create a test.asp file (that is processed by the classic ASP engine), it returns the correct path - every time!
So, my questions are obvious.
- Why did ASP.NET start caching this path suddenly?
- How to solve this?
- I have searched the web for answers, but I can't find anything about .NET's internal caching. Is there any way to influence it?
Sorry this is such a long story, I wanted to make the situation absolutely clear. I think this is a real expert question, I hope someone has an idea of where to look. My thanks in advance.