Как вызвать метод веб-службы? - PullRequest
22 голосов
/ 04 августа 2009

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

[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;
}

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

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

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

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

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

Я новичок в веб-службах.

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

Ответы [ 4 ]

19 голосов
/ 04 августа 2009

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

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

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

10 голосов
/ 04 августа 2009

Текущий способ сделать это - использовать команду «Добавить ссылку на службу». Если вы укажете «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 - это« устаревшая технология »», и спросите, почему он учит устаревшей технологии.

1 голос
/ 04 августа 2009

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

0 голосов
/ 07 декабря 2015

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...