Пользовательские обработчики Http IIS7 и ASP.NET

У нас есть несколько обработчиков HTTP, указанных в нашем web.config. Когда мы запускали этот сайт через проект веб-сайта, все работало нормально. Но по какой-то причине после переноса этого в проект WAP и указания на платформу .NET 3.5 обработчики не работают, когда я открываю сайт в IIS 7 в нашем окне разработчика. Нужно ли мне делать что-то особенное в IIS7, кроме указанных настраиваемых обработчиков, которые уже существуют в моем web.config?

Когда я смотрю на раздел «Сопоставления обработчиков» в IIS 7 для нашего сайта, я вижу 3 обработчика, перечисленных с нашим настраиваемым расширением. Похоже, он подбирает наши обработчики, указанные в нашем web.config. Но я знаю, что обработчики, которые работали на веб-сайте, отличном от WAP, не работают в этом проекте WAP, и я не знаю почему.

Например, когда один из наших обработчиков пытается вмешаться, когда на него ссылаются, я получаю:

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

Parser Error Message: Could not create type 'jaxHandler'.

Source Error:

Line 1:  
Line 2:  
Line 3:  using System;


Source File: /jaxHandler.ashx    Line: 1

Version Information: Microsoft .NET Framework Version:2.0.50727.3074; ASP.NET Version:2.0.50727.3074 

более того, когда я пытаюсь щелкнуть гиперссылку на нашем сайте с расширением .customextension, обработчик, похоже, не улавливает ее.

Когда я нажимаю на гиперссылку, я получаю:

HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable. Detailed Error InformationModule IIS Web Core 
Notification MapRequestHandler 
Handler StaticFile 
Error Code 0x80070002 
Requested URL http://sss:80/somename.prod
Physical Path C:\www\sss\somename.prod 
Logon Method Anonymous 
Logon User Anonymous 

(Я заменил настоящий текст на «somename», а название нашей компании на «sss») в приведенном выше случае для обеспечения конфиденциальности.

Если я посмотрю в раздел Http Handlers в IIS7, я действительно вижу, что * .prod зарегистрирован. И вот как мы это настроили в нашем web.config в настраиваемом разделе:

<add name="sss" path="*.prod" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" preCondition="bitness32"/>

person PositiveGuy    schedule 13.08.2009    source источник
comment
Пожалуйста, дополните. Это не работает, о многом мне не говорит.   -  person John Saunders    schedule 13.08.2009
comment
ок, я добавил много деталей.   -  person PositiveGuy    schedule 13.08.2009


Ответы (2)


Что вам нужно сделать, так это создать свой код.

Вам нужно скопировать весь код C # в файл .ashx.cs. Фактически, я рекомендую вам создать новый .ashx и скопировать код C # в его файл .ashx.cs.

Веб-сайты создаются динамически. Проекты веб-приложений, как и любой другой подобный тип проекта в Visual Studio, должны иметь код в исходных файлах и встраивать этот код в сборку.

person John Saunders    schedule 13.08.2009
comment
.ashx не имеет кода. Я понимаю. Да, потому что это было в проекте веб-сайта. Попался - person PositiveGuy; 13.08.2009
comment
У вас есть это, но скажите, что веб-сайт - это не проекты. - person John Saunders; 13.08.2009
comment
Спасибо. Потому что, когда я запускал это преобразование в веб-приложение по идентификатору .ashx, не создавал класс программной части или .designer. Похоже, что .designer не создается, но можно подумать, что преобразование в веб-приложение по крайней мере создаст файл кода программной части. - person PositiveGuy; 13.08.2009
comment
поэтому я просто подумал, что не было никакого кода программной части для .ashx даже в WAP, что неверно. - person PositiveGuy; 13.08.2009
comment
@coffeeaddict: Нет, это не проекты. Они отличаются от всех других проектов, создаваемых Visual Studio. Внедрение веб-сайтов было ужасной идеей: теперь мы должны спросить, какие из них кто-то использует. Microsoft намеревалась использовать веб-сайты, поэтому удалила WAP в VS2005. По крайней мере, тогда был бы только один вид - без разделения в знаниях и поведении. Но с добавлением WAP в VS2005 SP1, в лучшем случае мы получаем неоднозначное сообщение. - person John Saunders; 13.08.2009
comment
Я знаю, что они разные, но я говорю, что это проекты в том смысле, что они являются физическим аспектом вашего решения. Я знаю, что это не WAP. - person PositiveGuy; 13.08.2009
comment
Да, это было определенно ужасно. Это было ЕДИНСТВЕННОЕ место, где я видел это. В любой другой команде, у нас всегда был WAP в 2008 году или, по крайней мере, мы использовали плагин WAP в 2005 году в те времена. - person PositiveGuy; 13.08.2009
comment
Я не понимаю, почему, черт возьми, MS оставляет веб-сайт в качестве опции в VS 2008. Это неубедительное оправдание, чтобы сказать, что мы предлагаем смешанный пакет из-за выбора, когда очевидно, что вариант веб-сайта был и остается неудачным и плохим способом создать веб-сайт и НЕ является профессиональным или не соответствует тому, как остальные проекты работают на C # или любом другом языке в этом отношении. - person PositiveGuy; 13.08.2009
comment
Для тебя, Джон, я перестану говорить «Проекты веб-сайтов» :) Да, я знаю. - person PositiveGuy; 13.08.2009
comment
Что им следует сделать, так это сделать редизайн с нуля. Предположим, будет WAP, но есть и веб-сайты. Если бы веб-сайты предназначались только для простых вещей, как бы вы их спроектировали? В этом случае вы можете удалить App_Code и т. Д. В пользу библиотек классов во внешних проектах; вы могли бы сосредоточиться на реальных преимуществах модели веб-сайта и не обременять ее решением проблемы веб-сайта, а также проблемы WAP. - person John Saunders; 13.08.2009
comment
Я создал эти новые .ashx, скопировал их на сервер. По какой-то причине, когда я нажимаю на гиперссылку, я все равно получаю эту ошибку выше, говоря о статическом обработчике файлов. - person PositiveGuy; 13.08.2009
comment
а, вот и мы: blogs.iis.net/ thomad / archive / 2006/11/04 / precondition-what.aspx - person PositiveGuy; 13.08.2009
comment
Вы потом строили сайт? Вам также следует попробовать использовать команду «Опубликовать». - person John Saunders; 13.08.2009
comment
Не уверен, что требуется код за файлом. Если пространство имен или имя класса обработчика не совпадают, ASP.Net генерирует этот тип ошибки синтаксического анализа, а затем, кажется, выбирает случайное значение с помощью ‹namespace›; вроде виноват. У моего обработчика нет кода, но он по-прежнему использует C # для чтения данных и возврата ответа JSON и отлично работает. - person Swanny; 27.02.2013

Для приложений ASP.NET, работающих на IIS7, HttpHandlers должны быть отображены в разделе <system.webServer> вашего web.config. В IIS6 они были отображены в разделе <system.web>.

<system.webServer>
    <handlers>
        <add name="HandlerName" 
             path="HandlerPath" verb="*" type="Handler.Type"
             resourceType="Unspecified" />
    </handlers>
</system.webServer>
person Kevin Babcock    schedule 13.08.2009
comment
да, у нас есть сопоставление с веб-сервером, потому что этот сайт уже работает на нашем prod-сервере в IIS7 - person PositiveGuy; 13.08.2009