Перемещенный мой сайт 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. Вы можете научить его в два этапа:

  • Добавить новый тип MIME:

Extension: .svc MIME type: application/octet-stream

enter image description here

  1. Добавить новый управляемый обработчик 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.