Как вызвать метод веб-службы?
У меня есть веб-служба, которая содержит этот метод:
[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 - Мне нравится форматирование текста на лету здесь:)
Ответы
Ответ 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)
внутри первого метода
![введите описание изображения здесь]()