В IIS 7 можно использовать Модуль Перезаписи URL , как объяснено в этом сообщении блога .
В IIS 6 Вы могли записать http модуль , который перепишет URL:
public class RestModule : IHttpModule
{
public void Dispose() { }
public void Init(HttpApplication app)
{
app.BeginRequest += delegate
{
HttpContext ctx = HttpContext.Current;
string path = ctx.Request.AppRelativeCurrentExecutionFilePath;
int i = path.IndexOf('/', 2);
if (i > 0)
{
string svc = path.Substring(0, i) + ".svc";
string rest = path.Substring(i, path.Length - i);
ctx.RewritePath(svc, rest, ctx.Request.QueryString.ToString(), false);
}
};
}
}
И существует хорошее пример , как достигнуть extensionless URL в IIS 6, не используя третье лицо модули ISAPI или подстановочное отображение.
Здесь имеет более подробную информацию с помощью Модуля Перезаписи IIS 7, или с помощью пользовательского модуля: http://www.west-wind.com/Weblog/posts/570695.aspx
Его легкие на IIS 7 - используют Модуль Перезаписи URL
На IIS 6, который я нашел, что его самое легкое использовало модуль Перезаписи ISAPI , который позволяет Вам определить ряд регулярных выражений, которые отображают URL запроса на .svc файл...
В IIS6 или 7 вы можете использовать IIRF , бесплатный переписывающий фильтр. Вот правило, которое я использовал:
# Iirf.ini
#
RewriteEngine ON
RewriteLog c:\inetpub\iirfLogs\iirf-v2.0.services
RewriteLogLevel 3
StatusInquiry ON RemoteOk
CondSubstringBackrefFlag *
MaxMatchCount 10
# remove the .svc tag from external URLs
RewriteRule ^/services/([^/]+)(?<!\.svc)/(.*)$ /services/$1.svc/$2 [L]
Существует также способ исключить физические файлы .svc в целом. Это можно сделать с VirtualPathProvider
.
См.: http://social.msdn.microsoft.com/forums/en-us/wcf/thread/350f2cb6-febd-4978-ae65-f79735d412db