Веб-служба WCF, удаляющая расширение svc, добавляет .svc ко всем расширениям

Я применил правило перезаписи URL в IIS 7 следующим образом:

Шаблон: ^ ([0-9a-zA-Z -] +) / ([0-9a-zA-Z-./()pting+)

RewriteUrl: {R: 1} .svc / {R: 2}

Это отлично работает, когда я вызываю свою службу следующим образом: http: // mysite / site / myservice / input / params < / а>

Проблема, с которой я столкнулся, заключается в том, что все другие ссылки на файлы HTML в моем проекте, похоже, были добавлены с помощью .svc, например, этот код не работает:

‹Ссылка rel =" stylesheet "type =" text / css "href =" StyleSheet / StyleSheet.css "/>

Когда я пытаюсь перейти по URL-адресу в веб-браузере, я получаю следующее сообщение об ошибке:

ресурс не может быть найден: Запрошенный URL: /site/stylesheet*.svc*/stylesheet.css

Кажется, что IIS правильно удаляет svc, если он присутствует, но добавляет его в тех случаях, когда его нет.

Любые идеи??


person KSoza    schedule 23.09.2011    source источник


Ответы (1)


То, что вы описываете, на самом деле является правильным поведением с учетом того, как определено правило перезаписи. Помните, что правило гласит, что для любого входящего URL-адреса, соответствующего шаблону ^([0-9a-zA-Z-]+)/([0-9a-zA-Z-./()]+), переписать его так, чтобы .svc был добавлен к 1-й группе.

Очевидно, это не то, что вам нужно. Следовательно, вам необходимо убедиться, что перезапись применяется только к некоторым URL-адресам, то есть к вашим вызовам службы.

Я бы посоветовал поместить все ваши .svc файлы в специальную подпапку, например "services" и измените правило следующим образом:

^services/([0-9a-zA-Z-]+)/([0-9a-zA-Z-./()]+)

Таким образом, будут перезаписаны только служебные URL-адреса, а все остальные не будут затронуты, поскольку они больше не соответствуют шаблону.

person mthierba    schedule 23.09.2011
comment
Спасибо, сработало! .... Для всех, кто наткнется на этот пост, я также изменил RewriteUrl на: services / {R: 1} .svc / {R: 2} - person KSoza; 23.09.2011