Подтвердить что ты не робот

Как вызвать метод веб-службы?

У меня есть веб-служба, которая содержит этот метод:

[WebMethod]
public static List<string> GetFileListOnWebServer()
{
   DirectoryInfo dInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/UploadedFiles/"));
   FileInfo[] fInfo = dInfo.GetFiles("*.*", SearchOption.TopDirectoryOnly);

   List<string> listFilenames = new List<string>(fInfo.Length);

   for(int i = 0; i < fInfo.Length; i++)
   {
        listFilenames.Add(fInfo[i].Name);
   }

   return listFilenames;
}

Это возвращает список имен файлов в папке. Когда я отлаживаю приложение, он отлично работает.

Что я хочу сделать, это вызов этого метода webservice из приложения winform. Я добавил ссылку на .dll webservice, и так я называю метод выше:

private void Form1_Load(object sender, EventArgs e)
{
    List<string> files = TestUploaderWebService.Service1.GetFileListOnWebServer();
}

Вышеприведенный код не работает - когда он входит в метод, путь к веб-приложению является нулевым, а множество свойств из класса HostingEnvironment также равно null. Где моя ошибка при попытке вызвать метод веб-службы из другого приложения winform?

Обратите внимание, что веб-служба выполняется в Visual Web Developer Express, а winform в Visual С# express; поэтому я должен был добавить dll веб-службы в качестве ссылки в приложении winform. У меня нет полной версии Visual Studio, что позволило бы мне создать одно решение с обоими проектами.

Я новичок в веб-сервисах.

PS - Мне нравится форматирование текста на лету здесь:)

4b9b3361

Ответ 1

В визуальной студии используйте функцию "Добавить веб-ссылку", а затем введите URL-адрес своей веб-службы.

Добавив ссылку на DLL, вы не ссылаетесь на нее как на веб-службу, а просто на сборку.

Когда вы добавляете веб-ссылку, вы создаете прокси-класс в своем проекте, который имеет те же или похожие методы/аргументы, что и ваш веб-сервис. Этот класс прокси взаимодействует с вашим веб-сервисом через SOAP, но скрывает все материалы протокола связи, поэтому вам не нужно беспокоиться об этом.

Ответ 2

Текущий способ сделать это - использовать команду "Добавить ссылку на службу". Если вы укажете "TestUploaderWebService" в качестве имени ссылки службы, это приведет к генерации типа TestUploaderWebService.Service1. Этот класс будет иметь метод с именем GetFileListOnWebServer, который вернет массив строк (вы можете изменить это как список строк, если хотите). Вы бы использовали его следующим образом:

string[] files = null;
TestUploaderWebService.Service1 proxy = null;
bool success = false;
try
{
    proxy = new TestUploaderWebService.Service1();
    files = proxy.GetFileListOnWebServer();
    proxy.Close();
    success = true;
}
finally
{
    if (!success)
    {
        proxy.Abort();
    }
}

P.S. Скажите своему преподавателю взглянуть на " Microsoft: веб-службы ASMX являются" технологиями Legacy" и спрашивают, почему он учит устаревшим технологиям.

Ответ 3

Ответ Джеймса, конечно, правильный, но я должен напомнить вам, что вся вещь ASMX, если не устарела, по крайней мере, не является текущим методом. Я настоятельно рекомендую вам заглянуть в WCF, хотя бы для того, чтобы не изучать вещи, которые вам нужно забыть.

Ответ 4

напишите return(secondmethod) внутри первого метода

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