Онлайн-сервис ASMX работает, когда весь код находится в одном файле без кода - PullRequest
1 голос
/ 04 мая 2010

У меня есть веб-служба ASMX, код которой полностью находится в файле с выделенным кодом, поэтому все содержимое файла .asmx:

<%@ WebService Language="C#" CodeBehind="~/App_Code/AddressValidation.cs" Class="AddressValidation" %>

На моей тестовой машине (Windows XP с IIS 5) я настроил виртуальный каталог только для этого решения ASP.NET 2.0, и все отлично работает. Весь мой код хорошо отделен, и он просто работает.

Однако, когда мы развернули это решение в нашей среде разработки Windows Server 2003, мы заметили, что код компилируется только тогда, когда весь код был добавлен непосредственно в файл .asmx, что означает, что решение не работает с кодом -позади. Мы не можем понять, почему это происходит.

Одна вещь, которая отличается от нашей установки в нашей среде разработки, состоит в том, что вместо создания отдельного виртуального каталога только для этого решения, мы поместили его в существующий каталог, в котором работает классическое приложение ASP. Итак, здесь у нас есть папка с приложением ASP.NET 2.0 в каталоге, который содержит классическое приложение ASP. Конечно, все в приложении ASP.NET 2.0 работает, если весь код находится в файле .asmx, а не в коде позади, но нам бы очень хотелось узнать, почему он не распознает файлы кода и компилирует его правильно.

Ответы [ 3 ]

1 голос
/ 05 мая 2010

Как уже упоминали другие, вероятно, лучше создать решение как «Проект веб-приложения». Таким образом, ваш код будет предварительно скомпилирован для запуска на сервере.

Для нас сработало следующее решение: В IIS перейдите в папку на вашем веб-сайте, где находится ваше решение. Щелкните правой кнопкой по папке и выберите Свойства . На вкладке Каталог в разделе Настройки приложения нажмите Создать , чтобы превратить папку в приложение (я полагаю, что это также можно сделать, просто сделав папку Виртуальный каталог). Затем убедитесь, что ваша конфигурация ASP.NET настроена на использование ASP.NET версии 2.0. Проблема, с которой мы столкнулись, заключалась в том, что каталог большего размера работал под ASP.NET 1.0, поэтому нам пришлось пройти этот шаг, чтобы этот каталог использовал ASP.NET 2.0.

0 голосов
/ 04 мая 2010

Я не уверен, что могу объяснить, почему он не работает, однако размещение кода за файлами в папке App_Code кажется хитрой вещью. Файлы App_Code будут скомпилированы в одну сборку. Следовательно, код в вашем коде позади будет в конечном итоге в этой сборке, даже если он не предназначен для.

Сначала я создал бы файл AddressValidation.asmx.cs в той же папке, что и папка .asmx, и настроил атрибут CodeBehind файла asmx. Удалите файл из папки App_Code и поместите его содержимое в новый файл .asmx.cs.

Проверьте, работает ли это в среде XP, затем переместите его на целевой сервер.

0 голосов
/ 04 мая 2010

У вас может быть разница между «проектом» веб-сайта и проектом веб-приложения. В проекте веб-сайта все файлы компилируются динамически. В проекте веб-приложения сначала необходимо создать код.

Вы должны использовать проекты веб-приложений для веб-сервисов. Используйте Файл-> Новый проект и выберите соответствующий тип проекта. Затем создайте свой проект и, наконец, используйте команду Publish для развертывания в IIS.

...