Как написать веб-сервис asmx без использования каталога app_code? - PullRequest
3 голосов
/ 01 июня 2010

Извините за заголовок, но лучше просто объяснить проблему.

В моем решении 2 проекта

  1. Библиотека классов
  2. Веб-приложение, которое состоит из веб-службы (asmx).

веб-сервис имеет код, который находится в папке app_code с файлом [webservicename] .cs

Внутри кода веб-сервиса позади класса, у меня есть веб-метод, вот пример (упрощенно):

[WebMethod]
public EnumTaskExportState ProcessTask()
{
    var tm = new UploadTaskManager();
    return tm.ProcessTask();
}

Теперь во время разработки, в Visual Studio (2010 или 2008), когда я щелкаю правой кнопкой мыши на UploadTaskMananger, а затем выбираю «Перейти к определению». Меня забирают в AppData \ Temp [некоторая структура папок] ... и т. Д. ..., и он отображает определение открытого класса.

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

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

Как я могу это исправить? Возможно, вам не нужен каталог app_code?

Ответы [ 2 ]

3 голосов
/ 02 июня 2010

Вы должны создавать веб-сервис, используя File-> New Web Site. Я настоятельно рекомендую вам никогда не создавать веб-сервис на веб-сайте.

Вместо этого создайте свой веб-сервис, используя File-> New Project и выбрав «Приложение-службу WCF». Если вы застряли с помощью веб-служб ASMX (которые Microsoft теперь считает «устаревшей технологией»), выберите «Приложение веб-службы ASP.NET».

Они оба будут проектами веб-приложений и будут вести себя как все другие типы проектов в Visual Studio.

Помимо прочего, не будет папки App_Code.

2 голосов
/ 01 июня 2010

Это довольно легко

Шаг 1 ... при создании нового веб-сервиса также создается файл app_code / .cs. Скопируйте подпись из этого класса, она будет использоваться в качестве шаблона на шаге 4.

Шаг 2 ... удалить созданный файл app_code / .cs

Шаг 3. В своем файле классов создайте пространство имен и структуру папок, в которую вы будете включать классы веб-служб, содержащие веб-методы. Например Class1.WebServices

Шаг 4. В Namespace Class1.WebServices (согласно приведенному выше примеру) создайте новый класс, затем замените сигнатуру класса по умолчанию на скопированную сигнатуру класса из шага 1.

Шаг 5. Отредактируйте веб-сервис сейчас и создайте свои веб-методы

Шаг 6. В веб-приложении отредактируйте файл asmx, чтобы он ссылался на класс без кода, например

<%@ WebService Language="C#"  Class="Class1.WebServices.WebServiceClass" %>

Шаг 7, тест!

...