HTTPHandler и svc

У меня есть существующее веб-приложение, которое установлено на нескольких машинах. клиенты сценариев и клиенты .net используют службы ".asmx" через одну машину, которая направляет все вызовы на другие машины.

Клиент ----> | Веб-сайт \ Виртуальный каталог (HttpHandler) | ----> |Другой сервер \ реальный .asmx|

Я добавил новую службу .svc, которая выполняет те же функции, и добавил для нее обработчик (конфигурация каталога):

<system.webServer>
<handlers>
  <add name="MY_ASMX" verb="*" path="*.asmx" type="MY.AO.HttpProxy, Astea.AO.HttpProxy" resourceType="Unspecified" preCondition="integratedMode" />
  <add name="MY_ASPX" verb="*" path="*.aspx" type="MY.AO.HttpProxy, Astea.AO.HttpProxy" resourceType="Unspecified" preCondition="integratedMode" />
  <add name="MY_WSDL" verb="*" path="*.wsdl" type="MY.AO.HttpProxy, Astea.AO.HttpProxy" resourceType="Unspecified" preCondition="integratedMode" />
  <add name="MY_SVC" verb="*" path="*.svc" type="MY.AO.HttpProxy, Astea.AO.HttpProxy" resourceType="Unspecified" preCondition="integratedMode" />

while asmx request are routed fine, my new .svc on the end server does not get called, and even the Httphandler is skipped. if i call the .svc directly on the other machine it works.

ошибка, которую я получаю:

WebHost failed to process a request.
Sender Information: System.ServiceModel.Activation.HostedHttpRequestAsyncResult/26458746
 Exception: System.Web.HttpException (0x80004005): The service '/Mysite/MyDirectory/settings.svc' does not exist. ---> System.ServiceModel.EndpointNotFoundException: The service '/Mysite/MyDirectory/settings.svc' does not exist.

Я уже пробовал следующее

  1. добавить «buildProviders» в раздел компиляции, который удаляет .svc
  2. Нажмите MimeTypes и введите «.svc» и «application/octet-stream» и сохраните
  3. добавить обработчик:

ничего не помогает, обработчик http не вызывается

p.s. Я работаю с AppPool .net 4.0 Integrated


person user355289    schedule 17.04.2012    source источник


Ответы (2)


Расширения .svc по умолчанию считаются службами WCF, и для них уже существуют обработчики/модули. Вы можете удалить существующие обработчики/модули, поместив элемент перед вашим элементом <add>:

<remove name="svc-ISAPI-4.0_32bit" />

(или, если на win64:)

<remove name="svc-ISAPI-4.0_64bit" />

И в элементе <modules>:

<remove name="ServiceModel-4.0" />
person jlew    schedule 17.04.2012
comment
уже пробовал ‹remove name=svc-ISAPI-4.0_64bit /› и это не влияет... другие расширения ловятся, а .svc нет. - person user355289; 17.04.2012
comment
Я также попытался удалить все другие сопоставления обработчиков, которые есть в сопоставлениях обработчиков IIS для этого сайта, но безуспешно. - person user355289; 17.04.2012
comment
Кроме того, удалите этот http-модуль из раздела ‹modules›: ‹remove name=ServiceModel-4.0 /› - person jlew; 18.04.2012

Я нашел это. Добавление:

<compilation debug="true" >
  <buildProviders>
    <remove extension=".svc"/>
  </buildProviders>
</compilation>

вызвало ошибку, из-за которой я сначала отступил: «~/ServiceManagement.svc» требовал, чтобы buildProvider для «.svc» был включен

«~/ServiceManagement.svc» автоматически создается в корневой конфигурации компьютера при установке MS AppFabric. Поскольку я использую эту папку только для перенаправления, Appfabric мне там не нужен, поэтому я его удалил:

<system.serviceModel>
<serviceHostingEnvironment>
  <serviceActivations>
    <remove relativeAddress="~/ServiceManagement.svc"/>
  </serviceActivations>
</serviceHostingEnvironment>
person user355289    schedule 18.04.2012