Ошибка HTTP 404.3 - не найдено "при просмотре службы wcf в Windows Server 2008 (64-разрядная версия)

88

Я разрабатываю приложение на основе .Net Framework 3.5 sp1 и размещаю его на сервере Windows 2008 (64 бит).

При просмотре службы wcf (.svc) локально все в порядке, но при просмотре с полным URL-адресом домена возникла ошибка.

локальный адрес выглядит так: http: //localhost/MyService.svc

а адрес домена такой: http://MySite.ir/MyService.svc

кстати страницы (.aspx) и другие файлы корректно работают как на локальном хосте, так и с адресом домена.

любая идея будет оценена

Вот подробная ошибка:


Ошибка HTTP 404.3 - не найдено

Запрашиваемая страница не может быть обслужена из-за конфигурации расширения. Если страница представляет собой сценарий, добавьте обработчик. Если файл должен быть загружен, добавьте карту MIME. Подробная информация об ошибках

Модуль: StaticFileModule

Уведомление: ExecuteRequestHandler

Обработчик: StaticFile

Код ошибки: 0x80070032

Запрошенный URL: http://MySite.ir:80/MyService.svc

Физический путь: D: \ inetpub \ vhosts \ MySite.ir \ httpdocs \ MyService.svc

Метод входа в систему: анонимный

Вход в систему Анонимный пользователь

Мори
источник

Ответы:

224

Убедитесь, что вы активировали компоненты WCF отсюда .

Или альтернативный и простой способ: перейдите в панель управления -> Включить или выключить функцию Windows -> и убедитесь, что у вас отмечены все параметры, как указано на скриншоте ниже.

введите описание изображения здесь

Возможно, вам потребуется активировать каждое поле и принять его, если вы получите ошибки при активации всех функций сразу.

Нирав Мехта
источник
36
.Net Framework 4.5 Advanced Services -> Проверить службы WCF и -> HTTP-активация сделала это за меня!
devHead 05
3
Windows Server 2012 - просто нужна была активация HTTP и установлен флажок Port Sharing.
dibs487
2
Я бы добавил к этому ответу, чтобы ящики активировали одну за другой. Все проверки одновременно могут не пройти. Это происходит в Windows Server 2012.
harveyt
2
этот ответ должен быть вверху
markthewizard1234
3
Это правильный ответ. Это решило проблему для меня, и мне не пришлось вручную добавлять что-либо вручную в сопоставления обработчиков IIS.
Энтони,
25

Хорошо, вот ответ:

Перейти к сопоставлениям обработчиков | Добавить диспетчер обработчиков -> А затем добавить информацию ниже

Путь запроса: * .svc

Тип: System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version = 3.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089

Имя: svc-Integrated

Мори
источник
3
Для всех, кто хочет добавить это в свой файл web.config, это работает для меня в проекте .NET 4.5: <add name = "svc-Integrated" path = " .svc" verb = " " type = "System.ServiceModel. Activation.HttpHandler, System.ServiceModel.Activation, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 "/>
Стефан Мор
6
Для меня добавление строки из @StefanMohr в Web.config не совсем сработало. Тем не менее, я изменил path="*.svc"и verb="*"и он работал большой. Таким образом, сработала строка, которую я использовал: <add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>(добавлено в configuration / system.webServer / handlers).
Арон Бойетт
11

Если у кого-то есть эта проблема на Windows Server 2012, ответ Билла Муна здесь решил ее для меня:

«Для Windows Server 2012 ... В диспетчере серверов нажмите« Добавить роли и компоненты », выберите соответствующий сервер, затем выберите« Функции ». В разделе« Функции .NET Framework 4.5 »вы увидите службы WCF, а под ним - найти активацию HTTP. "

Будет
источник
1
В любом существующем веб-приложении после добавления функции Windows вам также нужно будет сделать следующее: - Запустить inetmgr - Открыть «Сопоставления обработчиков» - Проверить, присутствуют ли сопоставления svc-ISAPI для расширения * .svc. Если нет, используйте действие «Вернуться к родительскому», чтобы скопировать их с родительского веб-сайта. Обратите внимание, что это предполагает, что сопоставления настраиваемых обработчиков настроены в web.config для приложения, как это обычно бывает в IIS7 +. Если нет, вы потеряете их при выполнении «Вернуться к родительскому».
Berend Engelbrecht
8

У меня на ноутбуке Windows 10, и я использую Visual Studio 2015 для разработки WCF. WCF отлично работает в Visual Studio, но при размещении в IIS я получил ту же ошибку.

Я проверил обработчик IIS. Расширение svc отсутствует. Поэтому я попытался добавить новый обработчик в IIS, как было предложено Мори в первом ответе. Я не нашел типа "System.ServiceModel.Activation.HttpHandler".

Итак, я открыл «Включить или выключить функции Windows» и установил функции, как показано на снимке экрана.

Это сработало для меня.

введите описание изображения здесь

Анил
источник
0

Если вы используете .Net 4.x, PublicKeyToken - 31bf3856ad364e35.

Однако после этой публикации о правильной установке служб WCF в IIS обработчик был настроен для меня.

Томас Хагстрём
источник
0

Я хотел добавить это в качестве комментария к ответу, но у меня не хватило для этого репутации. Я попытался запустить ServiceModelReg и aspnet_regiis.exe с различными флагами и добавил функцию активации HTTP, но она все равно не сработала. Даже использование пользовательского интерфейса сопоставления обработчика в IIS не работало, так как он не мог найти System.ServiceModel.Activation.HttpHandler. В конечном итоге сработало добавление обработчика, о котором Мори упоминает вручную, в мой файл web.config.

<system.webServer>
    <handlers>
      <add name="svc-Integrated" path="*.svc" verb="GET,HEAD,POST,DEBUG" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode" responseBufferLimit="4194304" />

Мой проект запускал .Net 3.5 и IIS 7.5 в Windows 7 и IIS 7.0 на Win Server 2008 R2.

Janspeed
источник
0

Попробуйте снять флажок «Активация HTTP WCF» в окне «Включение или отключение Windows» ( см. Здесь ) и переустановите, перейдя в

%windir%\Microsoft.Net\Framework\v3.0\Windows Communication Foundation\

и выполнить ServiceModelReg -i

Дервиш Озчелик
источник