.net / iis6 web.config中urlMappings对无扩展URL重写的限制

时间:2010-04-13 21:15:03

标签: asp.net iis-6

我正在调查iis6 / net 2.0网站的简单网址重写设置。

我在IIS中添加了一个指向.net可执行文件的通配符映射。我还使用web.config中的urlMappings元素添加一些重写的​​URL。我已将配置移到web.config之外,这样我就可以对列表进行更改而不强制重启应用程序,如下所示:

  <urlMappings configSource="config\urlMappings.config">
  </urlMappings>

我想允许我们的内容管理将网址添加到此文件中,以便我们可以使用无扩展名的友好网址。

<add url="~/someurl" mappedUrl="index.aspx?page=123" />

这很好用,但是我担心我可以在urlMappings配置中映射的条目数量有限。我似乎无法找到任何关于此的文档。有没有人发现任何限制?

感谢。

1 个答案:

答案 0 :(得分:2)

查看urlMapping内部 我看到了mappedUrl 存储在UrlMappingCollection 来自ConfigurationElementCollection的虚拟无限制。

网址数。

我认为虚拟对你可以加载的数量没有限制。

加载时间

加载延迟仅在说明Web时,然后保持静态值,并且仅在更改web.config或重新启动应用程序时重新加载。

记忆

您有一个静态集合,其中包含在每个请求开始时调用的所有数据。取决于您将在web.config上加载多少数据。

搜索时间

搜索时间,来自我的研究未完成使用任何哈希方法,但他们将字符串逐个比较,所以这里也许我们有一个小问题。

这是大量搜索每个网址的代码

internal string HttpResolveMapping(string path)
{
    string mappedUrl = null;
    string str2 = UrlPath.MakeVirtualPathAppRelative(path);
    UrlMapping mapping = this.UrlMappings[str2];
    if (mapping != null)
    {
        mappedUrl = mapping.MappedUrl;
    }
    return mappedUrl;
}

这里 UrlMapping mapping = this.UrlMappings [str2]; 正在调用

protected internal ConfigurationElement BaseGet(object key)
{
    foreach (Entry entry in this._items)
    {
        if ((entry._entryType != EntryType.Removed) && this.CompareKeys(key, entry.GetKey(this)))
        {
            return entry._value;
        }
    }
    return null;
}

我需要再检查一下,但我认为搜索网址映射存在问题。

在现实生活中

最近我为数据库调用优化了类似的代码。我在类似的循环上将速度从500ms降低到150ms-200ms,在几秒钟内称为20.000-50.000次。

在您的情况下,我不认为此路由会在页面调用中调用超过100-200次。 (我说100,因为你将所有调用重定向到asp.net,甚至是图像)

所以我认为这真的取决于超级如何快速赢得您的网络,但是您的用户我不认为他们注意到不同的,在这一点上,你只能获得10-20-30ms的速度 - 而且只有当你有大量的网址(可能超过1500个网址)时我们才会说话。

此外,调用内容的第一页,然后从此循环搜索,返回页面,然后跟随图像,因此用户将只看到页面的前1-5个呼叫延迟的不同不明白图像的小延迟。

此处的优化仅在程序上进行衡量,用户无法理解。

这里的时间来自我对我(慢)电脑的体验,只是给我的经验感。

更多单词

我认为urlMapping是一个可以帮助任何人开始使用的随时可用的解决方案,但是如果有些人有时间知识和资源值得修复他自己的url映射,那么就可以满足他的需求并且超快他喜欢。对于开始是很好的有urlMapping但是如果你需要更高级的思考,那么你可以在项目变大后更新它。

我喜欢速度,在电脑上等待的每一秒都是我们生命中的第二秒。 如果您使用urlMapping很容易,只需这样做,使网站可行,然后在几个月后再次检查。