Перемещенный мой сайт ASP.NET для IIS 8 на сервере Windows 2012... отсутствуют сервисы: файлы .svc доступны для просмотра, но их методы дают 404
Я перешел из IIS 6 на Windows Server 2003.
Я могу просмотреть файлы .svc. Я получаю хороший стандарт "Это страница службы Windows © Communication Foundation", если я перейду в http://example.com/Service.svc в браузере.
Но Я не могу перейти к любому из методов. Я получаю ошибку 404, если я перейду к http://example.com/Service.svc/Method?parameter=xyz в браузере.
Кто-нибудь видел что-нибудь подобное? Любые идеи или предложения?
Я думал, что у меня может возникнуть аналогичная проблема с этим вопросом: WCF на IIS8; *.svc обработчик не работает
Но симптомы разные (похоже, они вообще не видят файлы .svc), и ни одно из решений не работает (у меня есть функция Http Activation для установленных функций WCF и т.д.).
Ответы
Ответ 1
ОК, я отказался и заплатил Microsoft за $250 за поддержку. С технической помощью мы нашли решение, и вчера вечером подтвердили, что это определенно решение для всех наших серверов: мы полностью отключили SSL для служб WCF в web.config:
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding>
<security mode="Transport" />
"Транспорт" относится к безопасности транспортного уровня (TLS - новый SSL), поэтому HTTPS. Изменено так:
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding>
<security mode="None" />
Выключает WCF чрезвычайно чувствителен к тому, используете ли вы HTTP или HTTPS, и если вы используете неправильный, вы не получаете никаких полезных ошибок, всего 404.
В моем случае как старые, так и новые серверы были настроены на постоянное использование HTTPS для обеспечения безопасности. Но на новых серверах шифрование SSL (TLS) завершено на балансировщике нагрузки. В этом случае шифрование произошло только между браузером пользователя и нашим балансировщиком нагрузки, а трафик между нашим балансировщиком нагрузки и веб-серверами был незашифрованным HTTP.
Итак, служба прослушивала HTTPS, и когда запрос пришел по HTTP, он просто полностью проигнорировал его.
(Все остальные разговоры о похожих проблемах в Интернете сосредоточены на удалении и переустановке IIS и ASP.NET, а также в WCF и HTTP-активации и т.д., поэтому я надеюсь, что это поможет кому-то. Я рекомендую поддержку MS, если у вас есть вопрос о стеке MS что SO не может ответить вовремя. Это было, безусловно, намного дешевле, чем тратить еще несколько часов, пытаясь исправить это в одиночку).
Ответ 2
Пожалуйста, проверьте, добавлен ли ваш IIS обработчик svc.
Службы WCF не запускаются в IIS 8 с настройкой по умолчанию, поскольку веб-сервер не знает, как обрабатывать входящие запросы, предназначенные для файлов .svc. Вы можете научить его в два этапа:
Extension: .svc
MIME type: application/octet-stream
![enter image description here]()
-
Добавить новый управляемый обработчик HTTP:
Request path: *.svc
Type: System.ServiceModel.Activation.HttpHandler
Name: svc-Integrated
![enter image description here]()
Обновить веб-сайт/веб-приложение
Ссылки:
http://gyorgybalassy.wordpress.com/2012/09/24/publishing-a-wcf-service-on-iis8/
http://proq.blogspot.hk/2012/09/wcf-on-iis-and-windows-8.html
http://forums.iis.net/t/1200413.aspx?+svc+missing+can+t+find+Module+to+load+within+Handler+Mapping+IIS+8+0
Ответ 3
Надеюсь, что это поможет кому-то, хотя его поздно ответить на этот пост.
У меня такая же проблема, и я потратил часы и часы, чтобы найти решение. Наконец закончилось изменение
К счастью, я получил ответ на изменение файла RouteConfig.Cs следующим образом From
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
Для
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
пока вы должны поместить ваш .svc файл в корневое приложение.
Это был мой собственный вопрос, заданный по этой ссылке
Служба WCF передает Http404 по любому запросу, кроме .svc
Ответ 4
Просто хотел предоставить подборку предложений, если вы не пробовали один из них:
- Отсутствует ли [OperationContract] для предполагаемого метода?
- У вас есть какие-либо перезаписи URL-адресов, настроенные в файле web.config, которые могут перенаправлять вызовы метода, такие как перенаправление HTTP/S или некоторая конфигурация маршрута?
- Включить Fail Request Tracking в вашем IIS, чтобы узнать, какой подтип ошибки 404 вы получаете? 404,13? что-то другое? Скорее всего, это не потому, что что-то не найдено, а какая-то другая ошибка в запросе.
Дополнительные источники:
Ответ 5
Вы можете включить трассировку/ведение журнала в службе wcf
, чтобы вы могли проверить фактическую причину ошибки, если есть несоответствие в параметре или любой другой вещи, непосредственно из журналов ошибок.
Обратите внимание, что для включения трассировки это просто простая настройка конфигурации - http://msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx или Как включить трассировку WCF?
...
Другие предложения:
В ServiceContract
для требуемого метода вы использовали требуемые атрибуты. Так что скажем, Service.svc имеет servicecontractor, определенный в IService.cs
, и вас беспокоит Method
. Тогда Method
должен быть объявлен следующим образом.
[OperationContract]
[WebGet(UriTemplate = "Method?parameter={value}")]
string AnyMethodName(string value);
Здесь я использовал string
как тип ввода и вывода, вы можете использовать требуемый тип здесь.
Кроме того, вам необходимо иметь требуемый файл web.config для правильной настройки сервиса, привязки, конечной точки и т.д. Refer - http://msdn.microsoft.com/en-us/library/ms733932(v=vs.110).aspx
Итак, если вы размещаете его в http://www.example.com
, вы можете выполнить REST
на основе Get
запроса с помощью http://www.example.com/Service.svc/Method?parameter=XYZ
.
Дополнительная информация - http://www.c-sharpcorner.com/UploadFile/b1df45/rest-based-api-using-wcf-services/
Кроме того, как было предложено выше, может быть некоторая установка URL rewriting
, которую вы проверите и исправьте. или попробуйте напрямую с помощью https
версии URL. Или, если есть какой-то прокси-сервер, который блокирует, необходимо проверить.
Если есть request filtering
setup, тогда проверьте, заблокирован ли запрос Get
.
Или, если это вообще возможно, перерегистрируйте IIS с помощью aspnet_regiis.exe -iru
.